home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 045a / dvint29.zip / DVINT.LST next >
File List  |  1992-02-09  |  137KB  |  3,427 lines

  1. DESQview/QEMM Interrupt List    Release 29        Last change 2/9/92
  2. This compilation is Copyright (c) 1989, 1990, 1991, 1992 Ralf Brown
  3. ---------------------------------------------
  4. This is an extract of the full interrupt list, available as INTER29?.*.
  5. ---------------------------------------------
  6. If you notice any mistakes or omissions, please let me know!  It is only with
  7. YOUR help that the list can continue to grow at the current rate.  Please send
  8. all changes to me rather than distributing a modified version of the list.
  9.  
  10. Please read the file INTERRUP.1ST before asking me any questions.  You may find
  11. that they have already been addressed.
  12.  
  13.      Ralf Brown
  14.  
  15. ARPA: ralf@cs.cmu.edu
  16. UUCP: {ucbvax,harvard}!cs.cmu.edu!ralf
  17. BIT:  ralf%cs.cmu.edu@cmuccvma
  18. FIDO: Ralf Brown 1:129/26.1
  19.     or post a message to me in the DR_DEBUG echo
  20. CIS:  >INTERNET:ralf@cs.cmu.edu 
  21.  
  22. I reply to all e-mail submissions and inquiries, but some of my replies bounce
  23. because of bad return paths.  If you don't get a response from me within a
  24. reasonable period of time, send it again with a better return path (starting at
  25. harvard or ucbvax for UUCP, from the ARPA Internet for others).
  26. ---------------------------------------------
  27. See INTERRUP.1ST for the key to system abbreviations and a list of the
  28. trademarks mentioned here.
  29. ---------------------------------------------
  30. DISCLAIMER:  THIS MATERIAL IS PROVIDED "AS IS".     I verify the information
  31. contained in this list to the best of my ability, but I cannot be held
  32. responsible for any problems caused by use or misuse of the information,
  33. especially for those functions not officially  documented.  If it is marked
  34. "internal", you should check it carefully to make sure it works the same
  35. way in your version of the software (and please let me know whether or not
  36. it works the same way).     Information marked with "???" is known to be
  37. incomplete or guesswork.
  38. ---------------------------------------------
  39. The use of -> instead of = signifies that the indicated register or register
  40. pair contains a pointer to the specified item, rather than the item itself
  41. ----------1000-------------------------------
  42. INT 10 - VIDEO - SET VIDEO MODE
  43.     AH = 00h
  44.     AL = mode (see below)
  45. Return: AL = video mode flag (Phoenix BIOS)
  46.         20h mode > 7
  47.         30h modes <= 7 except mode 6
  48.         3Fh mode 6
  49.     AL = CRT controller mode byte (Phoenix 386 BIOS v1.10)
  50. Notes:    IBM standard modes do not clear the screen if the high bit of AL is set
  51.       (EGA or higher only)
  52. SeeAlso: AX=0070h,AX=007Eh,AX=10F0h,AX=6F05h,AH=FFh"GO32",INT 5F/AH=00h
  53.  
  54. Values for video mode:
  55.       text/ text pixel     pixel    colors    disply    scrn  system
  56.       grph resol  box    resoltn        pages    addr
  57.  21h = G   80x43  8x8    720x348     mono        B000 DESQview 2.x+Hercules [3]
  58.  22h = T  132x44  8x8                     Tseng Labs EVA
  59.      = G   80x43  8x8    720x348     mono        B800 DESQview 2.x+Hercules [3]
  60. Notes:
  61. [3] DESQview intercepts calls to change into these two modes (21h is page 0,
  62.       22h is page 1) even if there is no Hercules graphics board installed
  63. ----------1080--DX4456-----------------------
  64. INT 10 - VIDEO (DESQview 2.0x only) - internal - SET ??? HANDLER
  65.     AH = 80h
  66.     DX = 4456h ('DV')
  67.     ES:DI -> FAR subroutine to be called on ???
  68. Return: DS = segment of DESQview data structure for video buffer
  69. Note:    this function is probably meant for internal use only, due to the magic
  70.       value required in DX
  71.     the subroutine seems to be called when the DESQview menu is accessed;
  72.       on entry, AL = 03h or 04h
  73. ----------1081--DX4456-----------------------
  74. INT 10 - VIDEO (DESQview 2.0x only) - internal - GET ???
  75.     AH = 81h
  76.     DX = 4456h ('DV')
  77. Return: ES = segment of DESQview data structure for video buffer
  78.         BYTE ES:[0] = current window number in DV 2.0x
  79. Note:    this function is probably meant for internal use only, due to the magic
  80.       value required in DX
  81. SeeAlso: AH=82h
  82. ----------1082--DX4456-----------------------
  83. INT 10 - VIDEO (DESQview 2.0x only) - internal - GET CURRENT WINDOW INFO
  84.     AH = 82h
  85.     DX = 4456h ('DV')
  86. Return: DS = segment in DESQview for data structure
  87.          in DV 2.00,
  88.           BYTE DS:[0] = window number
  89.           WORD DS:[1] = segment of other data structure
  90.           WORD DS:[3] = segment of window's object handle
  91.     ES = segment of DESQview data structure for video buffer
  92.     AL = current window number
  93.     AH = ???
  94.     BL = direct screen writes
  95.         00h program does not do direct writes
  96.         01h program does direct writes, so shadow buffer not usable
  97.     BH = ???
  98.     CL = current video mode
  99.     CH = ???
  100. Note:    this function is probably meant for internal use only, due to the magic
  101.       value required in DX
  102. SeeAlso: AH=81h
  103. ----------10FE------------------------------
  104. INT 10 - TopView - GET SHADOW BUFFER
  105.     AH = FEh
  106.     ES:DI -> assumed video buffer
  107.         B800h:0000h color text/CGA graphics, B000h:0000h mono text,
  108.           or A000h:0000h EGA/VGA graphics (RSIS environments only)
  109. Return: ES:DI -> actual video buffer for calling process
  110. Notes:    if no multitasker or RSIS-compliant environment is installed, ES:DI is
  111.       returned unchanged; RSIS is the Relocated Screen Interface
  112.       Specification
  113.     for display pages other than 0, use AH=05h and AH=0Fh to determine
  114.       whether a particular page exists
  115.     TopView requires a call to AH=FFh to notify it that the screen has
  116.       changed; DESQview will check for changes itself until the first call
  117.       to AH=FFh
  118. SeeAlso: AH=05h,AH=FFh,INT 15/AX=1024h,INT 21/AH=2Bh"DESQview"
  119. ----------10FF-------------------------------
  120. INT 10 - TopView - UPDATE SCREEN FROM SHADOW BUFFER
  121.     AH = FFh
  122.     CX = number of consecutive changed characters
  123.     ES:DI -> first changed character in shadow buffer
  124. Notes:    avoid CX=0000h
  125.     DESQview will discontinue the automatic screen updating initiated by
  126.       AH=FEh after this call
  127. SeeAlso: AH=FEh
  128. ----------151000-----------------------------
  129. INT 15 - TopView - "PAUSE" - GIVE UP CPU TIME
  130.     AX = 1000h
  131. Return: after other processes run
  132. Note:    under DESQview, if the process issuing this call has hooked INT 08h,
  133.       the current time-slice is set to expire at the next clock tick rather
  134.       than immediately
  135. SeeAlso: AH=00h"MultiDOS",INT 21/AH=EEh"DoubleDOS",INT 2F/AX=1680h
  136. SeeAlso: INT 7F/AH=E8h
  137. ----------151001-----------------------------
  138. INT 15 - TopView - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  139.     AX = 1001h
  140.     BX = number of bytes to allocate
  141. Return: ES:DI -> block of memory or 0000h:0000h (DV v2.26+)
  142. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  143.       common memory
  144. SeeAlso: AX=1002h,AX=DE0Ch,AX=DE15h
  145. ----------151002-----------------------------
  146. INT 15 - TopView - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  147.     AX = 1002h
  148.     ES:DI -> previously allocated block
  149. Return: block freed
  150. SeeAlso: AX=1001h,AX=DE0Dh
  151. ----------151003-----------------------------
  152. INT 15 - TopView - "PRINTC" - DISPLAY CHARACTER/ATTRIBUTE ON SCREEN
  153.     AX = 1003h
  154.     BH = attribute
  155.     BL = character
  156.     DX = segment of object handle for window
  157. Note:    BX=0 does not display anything, it only positions the hardware cursor
  158. ----------1510-------------------------------
  159. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  160.     AH = 10h
  161.     AL = 04h thru 12h
  162. Return: pops up "Programming error" window in DV 2.x
  163. ----------151013-----------------------------
  164. INT 15 - TopView - "GETBIT" - DEFINE A 2ND-LEVEL INTERRUPT HANDLER
  165.     AX = 1013h
  166.     ES:DI -> FAR service routine
  167. Return: BX = bit mask indicating which bit was allocated
  168.          0000h if no more bits available
  169. SeeAlso: AX=1014h,AX=1015h
  170. Note:    only a few TopView/DESQview API calls are allowed during a hardware
  171.       interrupt; if other calls need to be made, the interrupt handler
  172.       must schedule a 2nd-level interrupt with "SETBIT" (AX=1015h)
  173. ----------151014-----------------------------
  174. INT 15 - TopView - "FREEBIT" - UNDEFINE A 2ND-LEVEL INTERRUPT HANDLER
  175.     AX = 1014h
  176.     BX = bit mask from INT 15/AX=1013h
  177. SeeAlso: AX=1013h,AX=1015h
  178. ----------151015-----------------------------
  179. INT 15 - TopView - "SETBIT" - SCHEDULE ONE OR MORE 2ND-LEVEL INTERRUPTS
  180.     AX = 1015h
  181.     BX = bit mask for interrupts to post
  182. Return: indicated routines will be called: (DV 2.0x) at next task switch
  183.                        (DV 2.2x) immediately
  184. SeeAlso: AX=1013h,AX=1014h
  185. Notes:    this is one of the few TopView calls which are allowed from a hardware
  186.       interrupt handler
  187.     the handler will be called with ES containing the segment of the handle
  188.       of the next task to be executed; on return, ES must be the segment of
  189.       a task handle
  190. ----------151016-----------------------------
  191. INT 15 - TopView - "ISOBJ" - VERIFY OBJECT HANDLE
  192.     AX = 1016h
  193.     ES:DI = possible object handle
  194. Return: BX = FFFFh if ES:DI is a valid object handle
  195.          0000h if ES:DI is not
  196. SeeAlso: AX=DE14h
  197. ----------151017-----------------------------
  198. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  199.     AX = 1017h
  200. Return: pops up "Programming error" window in DV 2.x
  201. ----------151018-----------------------------
  202. INT 15 - TopView - "LOCATE" - FIND WINDOW AT A GIVEN SCREEN LOCATION
  203.     AX = 1018h
  204.     BH = column
  205.     BL = row
  206.     ES = segment of object handle for window below which to search
  207.          0000h = start search with topmost window
  208. Return: ES = segment of object handle for window which is visible at the
  209.            indicated position, or covered by indicated window
  210.        = 0000h no window
  211. SeeAlso: AX=1023h,AX=1024h
  212. ----------151019-----------------------------
  213. INT 15 - TopView - "SOUND" - MAKE TONE
  214.     AX = 1019h
  215.     BX = frequency in Hertz (0000h = silence)
  216.     CX = duration in clock ticks (18.2 ticks/sec)
  217. Return: immediately, tone continues to completion
  218. Notes:    if another tone is already playing, the new tone does not start until
  219.       completion of the previous one.  Up to 32 tones may be queued before
  220.       the process is blocked until a note completes.
  221.     in DV 2.00, the lowest tone allowed is 20 Hz
  222.     if CX = 0, the current note is cancelled; if BX = 0 as well, all queued
  223.       notes are also cancelled
  224. SeeAlso: INT 16/AH=73h
  225. ----------15101A-----------------------------
  226. INT 15 - TopView - "OSTACK" - SWITCH TO TASK'S INTERNAL STACK
  227.     AX = 101Ah
  228. Return: stack switched
  229. Notes:    this call may not be nested; a second call must be preceded by a call
  230.       to "USTACK" (AX=1025h)
  231.     while TopView requires many API calls to be executed while on the
  232.       task's internal stack, DESQview allows those calls to be executed
  233.       regardless of the current stack
  234. SeeAlso: AX=1025h
  235. ----------15101B-----------------------------
  236. INT 15 - TopView - "BEGINC" - BEGIN CRITICAL REGION
  237.     AX = 101Bh
  238. Return: task-switching temporarily disabled
  239. Notes:    will not task-switch until "ENDC" (AX = 101Ch) called unless task
  240.       voluntarily releases the CPU (upon regaining the CPU, task-switching
  241.       will again be disabled)
  242.     suspends the caller until DOS is free
  243. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AX=DE13h,AX=DE1Ch,INT 2F/AX=1681h
  244. ----------15101C-----------------------------
  245. INT 15 - TopView - "ENDC" - END CRITICAL REGION
  246.     AX = 101Ch
  247. Return: task-switching enabled
  248. Note:    this API call may be made from within a hardware interrupt handler
  249. SeeAlso: AX=101Bh,AX=DE13h,AX=DE1Bh,INT 2F/AX=1682h
  250. ----------15101D-----------------------------
  251. INT 15 - TopView - "STOP" - STOP TASK
  252.     AX = 101Dh
  253.     ES = segment of object handle for task to be stopped
  254.          (== handle of main window for that task)
  255. Return: indicated task will not get any CPU time until restarted with AX=101Eh
  256. Note:    once a task has been stopped, additional "STOP"s are ignored
  257. BUG:    in DV 2.00, this function is ignored unless the indicated task is the
  258.       current task
  259. SeeAlso: AX=101Eh,AX=102Bh,AH=12h"VMiX"
  260. ----------15101E-----------------------------
  261. INT 15 - TopView - "START" - START TASK
  262.     AX = 101Eh
  263.     ES = segment of object handle for task to be started
  264.          (== handle of main window for that task)
  265. Return: indicated task is started up again
  266. Note:    once a task has been started, additional "START"s are ignored
  267. SeeAlso: AX=101Dh,AX=102Bh
  268. ----------15101F-----------------------------
  269. INT 15 - TopView - "DISPEROR" - POP-UP ERROR WINDOW
  270.     AX = 101Fh
  271.     BX = bit fields
  272.          bits 0-12: number of characters to display
  273.          bits 13,14: which mouse button may be pressed to remove window
  274.              00 = either
  275.              01 = left
  276.              10 = right
  277.              11 = either
  278.          bit 15: beep if 1
  279.     ES:DI -> text of message
  280.     CH = width of error window (0 = default)
  281.     CL = height of error window (0 = default)
  282.     DX = segment of object handle
  283. Return: BX = status: 1 = left button, 2 = right, 27 = ESC pressed
  284. Note:    window remains on-screen until ESC or indicated mouse button is pressed
  285. ----------151020-----------------------------
  286. INT 15 - TopView - UNIMPLEMENTED IN DV v2.00+
  287.     AX = 1020h
  288. Return: pops up "Programming error" window in DV v2.00+
  289. ----------151021-----------------------------
  290. INT 15 - TopView - "PGMINT" - INTERRUPT ANOTHER TASK
  291.     AX = 1021h
  292.     BX = segment of object handle for task to interrupt (not self)
  293.     DX:CX -> FAR routine to jump to next time task is run
  294. Return: nothing
  295. Notes:    the FAR routine is entered with the current ES, DS, SI, DI, and BP
  296.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  297.       needs to be preserved
  298.     multiple PGMINTs to a single task are processed last-in first-out
  299.     if the other task is in a DOS or DV API call, the interruption will
  300.       occur on return from that call
  301. ----------151022BX0000-----------------------
  302. INT 15 - TopView - "GETVER" - GET VERSION
  303.     AX = 1022h
  304.     BX = 0000h
  305. Return: BX nonzero, TopView or compatible loaded
  306.     (BL = major version, BH = minor version)
  307. Notes:    TaskView returns BX = 0001h, DESQview v2.00+ returns BX = 0A01h
  308. ----------151023-----------------------------
  309. INT 15 - TopView - "POSWIN" - POSITION WINDOW
  310.     AX = 1023h
  311.     BX = segment of object handle for parent window within which to
  312.          position the window (0 = full screen)
  313.     ES = segment of object handle for window to be positioned
  314.     DL = bit flags
  315.          bits 0,1: horizontal position
  316.         00 = current
  317.         01 = center
  318.         10 = left
  319.         11 = right
  320.          bits 2,3: vertical position
  321.         00 = current
  322.         01 = center
  323.         10 = top
  324.         11 = bottom
  325.          bit 4: don't redraw screen if set
  326.          bits 5-7 not used
  327.     CH = number of columns to offset from position specified by DL
  328.     CL = number of rows to offset from position specified by DL
  329. Return: nothing
  330. ----------151024-----------------------------
  331. INT 15 - TopView - "GETBUF" - GET VIRTUAL SCREEN INFO
  332.     AX = 1024h
  333.     BX = segment of object handle for window
  334.           (0 = use default)
  335. Return: ES:DI -> virtual screen
  336.     CX = size of virtual screen in bytes
  337.     DL = 00h text screen
  338.          01h graphics screen
  339. SeeAlso: INT 10/AH=FEh,INT 21/AH=2Bh/CX=4445h
  340. ----------151025-----------------------------
  341. INT 15 - TopView - "USTACK" - SWITCH BACK TO USER'S STACK
  342.     AX = 1025h
  343. Return: stack switched back
  344. Notes:    call only after having switched to internal stack with AX=101Ah
  345.     while TopView requires many API calls to be executed while on the
  346.       task's private stack, DESQview allows those calls to be executed
  347.       regardless of the current stack
  348. SeeAlso: AX=101Ah
  349. ----------1510-------------------------------
  350. INT 15 - DESQview (TopView???) - UNIMPLEMENTED IN DV 2.x
  351.     AH = 10h
  352.     AL = 26h thru 2Ah
  353. Return: pops up "Programming error" window in DV 2.x
  354. ----------15102B-----------------------------
  355. INT 15 - DESQview v2.00+ (TopView???) - "POSTTASK" - AWAKEN TASK
  356.     AX = 102Bh
  357.     BX = segment of object handle for task
  358. Return: nothing
  359. Note:    forces a task which is waiting on its objectq to continue by placing
  360.       the handle for the task on the objectq
  361. SeeAlso: AX=101Dh,AX=101Eh
  362. ----------15102C-----------------------------
  363. INT 15 - DESQview v2.00+ (TopView???) - START NEW APPLICATION IN NEW PROCESS
  364.     AX = 102Ch
  365.     ES:DI -> contents of .PIF/.DVP file (see below)
  366.     BX = size of .PIF/.DVP info
  367. Return: BX = segment of object handle for new task
  368.          0000h on error
  369.  
  370. Format of .PIF/.DVP file:
  371. Offset    Size    Description
  372.  00h    BYTE    reserved (0)
  373.  01h    BYTE    checksum of bytes 02h through 170h
  374.  02h 30 BYTEs    blank-padded program title
  375.  20h    WORD    maximum memory to allocate to partition in K
  376.  22h    WORD    minimum memory required in K
  377.  24h 64 BYTEs    ASCIZ program pathname
  378.  64h    BYTE    default drive letter ('A',...)
  379.  65h 64 BYTEs    ASCIZ default directory name
  380.  A5h 64 BYTEs    ASCIZ program parameters
  381.  E5h    BYTE    initial screen mode (0-7) (see also offset 189h)
  382.  E6h    BYTE    number of text pages used
  383.  E7h    BYTE    number of first interrupt to save
  384.  E8h    BYTE    number of last interrupt to save
  385.  E9h    BYTE    rows in virtual screen buffer
  386.  EAh    BYTE    columns in virtual screen buffer
  387.  EBh    BYTE    initial window position, row
  388.  ECh    BYTE    initial window position, column
  389.  EDh    WORD    system memory in K
  390.  EFh 64 BYTEs    ASCIZ shared program name
  391. 12Fh 64 BYTEs    ASCIZ shared program data file
  392. 16Fh    BYTE    flags1
  393.         bit 7: writes text directly to screen
  394.         bit 6: runs in foreground only
  395.         bit 5: uses math coprocessor
  396.         bit 4: accesses system keyboard buffer directly
  397.         bits 3-1: reserved (0)
  398.         bit 0: swappable
  399. 170h    BYTE    flags2
  400.         bit 6: uses command-line parameters in field at A5h
  401.         bit 5: swaps interrupt vectors
  402. ---information unique to .DVP files---
  403. 171h  2 BYTEs    keys to use on open menu
  404. 173h    WORD    size of script buffer in bytes
  405. 175h    WORD    automatically give up CPU after this many tests for keyboard
  406.         input in one clock tick (default 0 = never)
  407. 177h    BYTE    nonzero = "uses own colors"
  408. 178h    BYTE    nonzero if application swappable
  409. 179h  3 BYTEs    reserved (0) according to Quarterdeck documentation
  410.         in actual .DVP files, frequently 01h
  411. 17Ch    BYTE    nonzero to automatically close on exit
  412. 17Dh    BYTE    nonzero if copy-protect floppy is required
  413. ---information unique to DESQview 2.0+---
  414. 17Eh    BYTE    .DVP version number
  415.         00h DESQview v1.2+
  416.         01h DESQview v2.0+
  417.         02h DESQview v2.2+
  418. 17Fh    BYTE    reserved (0)
  419. 180h    BYTE    initial number of rows in physical window
  420. 181h    BYTE    initial number of columns in physical window
  421. 182h    WORD    maximum expanded memory to allow, in K
  422. 184h    BYTE    flags3
  423.         bit 7: automatically assign window position
  424.         bit 5: maximum memory value has been specified
  425.         bit 4: disallow "Close" command
  426.         bit 3: foreground-only when doing graphics
  427.         bit 2: don't virtualize
  428.         bit 1: ??? set by DV 2.31 when "Runs in Background" = "D"
  429. 185h    BYTE    keyboard conflict level (0-4 for DV<2.26, 00h-0Fh for DV2.26+)
  430. 186h    BYTE    number of graphics pages used
  431. 187h    WORD    extra system memory size
  432. 189h    BYTE    initial screen mode (FFh = default) (overrides offset E5h)
  433. ---information unique to DESQview 2.2+---
  434. 18Ah    BYTE    serial port usage
  435.         FFh uses all serial ports
  436.         00h no serial ports
  437.         01h only COM1
  438.         02h only COM2
  439. 18Bh    BYTE    flags4
  440.         bit 7: automatically close application on exit if .COM or .EXE
  441.             specified
  442.         bit 6: swappable if not using serial ports
  443.         bit 5: start program with window hidden (v2.26+)
  444.         bit 4: start program in background (v2.26+)
  445.         bit 3: virtualize text
  446.         bit 2: virtualize graphics
  447.         bit 1: share CPU when foreground
  448.         bit 0: share EGA when foreground and zoomed
  449. 18Ch    BYTE    protection level for 386 machines
  450. 18Dh 19 BYTEs    reserved (0)
  451. ----------15102D-----------------------------
  452. INT 15 - DESQview v2.00+ - "KMOUSE" - KEYBOARD MOUSE CONTROL
  453.     AX = 102Dh
  454.     BL = subfunction
  455.          00h determine whether using keyboard mouse
  456.         Return: BL = 00h using real mouse
  457.                  01h using keyboard mouse
  458.          01h turn keyboard mouse on
  459.          02h turn keyboard mouse off
  460. ----------15102E-----------------------------
  461. INT 15 - DESQview v2.40 - ALLOCATE ??? MEMORY
  462.     AX = 102Eh
  463.     BX = number of bytes
  464. Return: AX = status
  465.         0000h successful
  466.         ES = segment of allocated memory
  467.         0001h failed    
  468. ----------1511-------------------------------
  469. INT 15 - TopView commands
  470.     AH = 11h
  471.     AL = various (except 17h)
  472. Note:    in DESQview 2.x, these function calls are identical to AH=DEh, so
  473.       see those below
  474. SeeAlso: AH=DEh
  475. ----------1511-------------------------------
  476. INT 15 - VMiX - EXECUTE SHELL SYSTEM COMMANDS
  477.     AH = 11h
  478.     STACK:    DWORD    pointer to ASCIZ string containing a VMiX shell
  479.             request (max len = 127)
  480. Return: AX = status
  481. ----------1511-------------------------------
  482. INT 15 - MultiDOS Plus - TURN OFF AltZ TOGGLE
  483.     AH = 11h
  484. Note:    disables the Alt-Z MultiDOS command/program-selection hotkey
  485. SeeAlso: AH=12h"MultiDOS"
  486. ----------151117BX0000-----------------------
  487. INT 15 - DESQview v2.20+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  488.     AX = 1117h
  489.     BX = 0000h    get current mapping context without setting
  490.          nonzero    set new mapping context
  491. Return: BX = mapping context in effect before call
  492.     interrupts enabled
  493. Notes:    this function differs from AX = DE17h for DESQview v2.20 through 2.25
  494.     mapping contexts determine conventional-memory addressability; setting
  495.       a mapping context ensures that the associated program and data areas
  496.       are in memory for access.  Usable by drivers, TSRs and shared
  497.       programs.
  498.     caller need not be running under DESQview, but must ensure that the
  499.       stack in use will not be mapped out by the call
  500. SeeAlso: AX=DE17h,INT 2F/AX=1685h
  501. ----------1511DE-----------------------------
  502. INT 15 - DESQview - QEXT.SYS - INSTALLATION CHECK
  503.     AX = 11DEh
  504. Return: CF clear if installed
  505.         AX = segment at which QEXT.SYS is located
  506. Note:    a private entry point may be found by searching the beginning of the
  507.       returned segment for the signature string
  508.       "QUARTERDECK EXTENDED MEMORY MANAGER 286"; the word immediately
  509.       prior to the signature contains the QEXT version number in BCD,
  510.       and the word prior to that contains the offset within the QEXT
  511.       code segment of the private entry point
  512. SeeAlso: INT 67/AH=3Fh
  513.  
  514. Call private entry point with:
  515.     AH = 00h ???
  516.     AH = nonzero ???
  517. ----------1512-------------------------------
  518. INT 15 - VMiX - PUT PROCESS TO SLEEP
  519.     AH = 12h
  520.     STACK:    WORD    process ID
  521. Return: AX = status
  522. SeeAlso: AH=03h"MultiDOS",AX=101Dh,AH=13h"VMiX"
  523. ----------1512-------------------------------
  524. INT 15 - MultiDOS Plus - TURN ON AltZ TOGGLE
  525.     AH = 12h
  526. Note:    enables the Alt-Z MultiDOS command/program-selection hotkey
  527. SeeAlso: AH=11h"MultiDOS"
  528. ----------1512--BH00-------------------------
  529. INT 15 - TopView - SEND MESSAGE - "HANDLE" - RETURN OBJECT HANDLE
  530.     AH = 12h
  531.     BH = 00h
  532.     BL = which handle to return
  533.         00h handle in DWORD on top of stack
  534.         01h current task's window handle
  535.         02h given task's mailbox handle (task's handle on stack)
  536.         03h current task's mailbox handle
  537.         04h given task's keyboard handle (task's handle on stack)
  538.         05h current task's keyboard object handle
  539.         06h given task's OBJECTQ handle (task's handle on stack)
  540.         07h current task's OBJECTQ handle
  541.         08h      \
  542.           thru > return 0000:0000 under DV < 2.26
  543.         10h      /
  544.         0Ch (2.26+) task owning object with handle in DWORD on top of stack
  545.         0Dh (2.26+) task handle of owner (parent) of current task
  546. Return: DWORD on top of stack is object handle
  547. Note:    BL=0Ch,0Dh returns 00000000h if the object is not open (keyboard,
  548.       mailbox, panel, pointer, and timer objects) or is an orphan (task,
  549.       window)
  550. ----------1512--BH01-------------------------
  551. INT 15 - TopView - SEND MESSAGE - "NEW" - CREATE NEW OBJECT
  552.     AH = 12h
  553.     BH = 01h
  554.     BL = object type to create
  555.         00h (DV 2.0x only) handle is DWORD on top of stack
  556.         01h (DV 2.0x only) use task's window handle
  557.         02h (DV 2.0x only) given task's mailbox (task's handle on stack)
  558.         03h (DV 2.0x only) current task's mailbox
  559.         04h (DV 2.0x only) given task's keyboard (task's handle on stack)
  560.         05h (DV 2.0x only) current task's keyboard object
  561.         08h WINDOW class
  562.         09h MAILBOX class
  563.         0Ah KEYBOARD class
  564.         0Bh TIMER object (counts down 32-bit time in 10ms increments)
  565.         0Fh POINTER object
  566.         10h PANEL object
  567.     STACK: (if window object or WINDOW class)
  568.            DWORD address to jump to (no new task if high word == 0)
  569.            DWORD (reserved) 0 = non-task window, FFFFh = task window
  570.            DWORD bytes for task's private stack (FFFFh == default of 0100h)
  571.            DWORD bytes system memory for input buffer for READ/READN
  572.             (0 == none, -1 == default--same as logical window size)
  573.            DWORD window size, columns
  574.            DWORD window size, rows
  575.            DWORD length of window title
  576.            DWORD address of window title
  577. Return: DWORD on top of stack is new object handle
  578. Notes:    if a new task is created, it is started with
  579.       AX = BX = SI = DI = BP = 0
  580.       DX:CX = handle of parent task
  581.       DS = ES = SS = segment of private stack (and new task's handle)
  582.     new windows are orphans, inherit the colors/hidden status of the
  583.       creating task's window, and are placed in the upper left hand corner
  584.       of the screen but not automatically redrawn
  585.     new keyboards are closed, and have all object bits cleared except for
  586.       the hardware cursor bit
  587. SeeAlso: AH=12h/BH=02h
  588. ----------1512--BH02-------------------------
  589. INT 15 - TopView - SEND MESSAGE - "FREE" - FREE AN OBJECT
  590.     AH = 12h
  591.     BH = 02h
  592.     BL = object
  593.         00h handle in DWORD on top of stack
  594.         window: close window and free
  595.         timer: free timer
  596.         panel: free panel object
  597.         pointer: free pointer
  598.         01h task's window handle - kills task, never returns
  599.         02h given task's mailbox (task's handle on top of stack)
  600.         03h current task's mailbox
  601.         04h given task's keyboard (task's handle on top of stack)
  602.         05h current task's keyboard object
  603. Notes:    when a window is freed, its keyboard and pointer objects are freed;
  604.       task windows also free any mailbox, objectq, and panel objects held
  605.       by the task and any child tasks
  606.     if the keyboard being freed is the default keyboard for a task, this
  607.       call is equivalent to CLOSE
  608.     panel and pointer objects are automatically closed if open
  609. SeeAlso: AH=12h/BH=01h,AH=12h/BH=0Dh
  610. ----------1512--BH03-------------------------
  611. INT 15 - TopView - SEND MESSAGE - "ADDR" - GET HANDLE OF MESSAGE SENDER
  612.     AH = 12h
  613.     BH = 03h
  614.     BL = object
  615.         00h mailbox handle in DWORD on top of stack
  616.         02h sender of last msg read from mailbox (task's handle on stack)
  617.         03h sender of last msg read from current task's mailbox
  618. Return: DWORD on stack is task handle of message sender
  619. SeeAlso: AH=12h/BH=00h
  620. ----------1512--BH03-------------------------
  621. INT 15 - DESQview v2.26+ - "CONNECT" - CONNECT TWO WINDOWS
  622.     AH = 12h
  623.     BH = 03h
  624.     BL = window to be connected
  625.         00h handle of window to be attached in DWORD on top of stack
  626.         01h attach current task's main window
  627.     STACK: DWORD handle of window to attach to or 00000000h to detach
  628. Return: ???
  629. Notes:    when two windows are connected, both will move if the user moves either
  630.     multiple windows may be attached to a single window, but each window
  631.       may only be attached to one window at a time
  632. ----------1512--BX0300-----------------------
  633. INT 15 - TopView - SEND MESSAGE - "DIR" - GET PANEL FILE DIRECTORY
  634.     AH = 12h
  635.     BX = 0300h
  636.     STACK: DWORD handle of panel object
  637. Return: STACK: DWORD length of directory (always multiple of 14 bytes)
  638.            DWORD address of directory
  639. Note:    a null string is returned if the object is not open
  640.  
  641. Format of panel file:
  642. Offset    Size    Description
  643.  00h  2 BYTEs    C0h C3h
  644.  02h    BYTE    number of panels in file
  645.  03h    for each panel in file:
  646.         8 BYTEs  blank-padded panel name
  647.           DWORD  panel offset in file
  648.           WORD   panel length
  649.     data for panels (each consists of one or more window/query/manager
  650.     streams)
  651.         first byte of each panel must be 1Bh, fifth byte must be E5h
  652. ----------1512--BH04-------------------------
  653. INT 15 - TopView - SEND MESSAGE - "READ" - READ NEXT LOGICAL LINE OF WINDOW
  654.     AH = 12h
  655.     BH = 04h
  656.     BL = window to read from
  657.         00h handle is DWORD on top of stack
  658.         01h use calling task's default window
  659.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  660.         0Dh (DV 2.26+) default window of parent task of current task
  661. Return: STACK:    DWORD number of bytes read
  662.         DWORD address of buffer
  663. Notes:    reading starts at the current logical cursor position; the cursor is
  664.       updated to point at the character following the last one read
  665.     any translucent blanks (FFh) which are visible on screen are changed
  666.       to the character which is seen through them
  667.     the string produced by the read is placed in an input buffer which may
  668.       be reused by the next READ or READN of a window
  669.     window stream opcodes D8h and D9h determine whether the read returns
  670.       characters or attributes
  671. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=12h
  672. ----------1512--BH04-------------------------
  673. INT 15 - TopView - SEND MESSAGE - "READ" - GET NEXT RECORD FROM OBJECT
  674.     AH = 12h
  675.     BH = 04h
  676.     BL = object
  677.         00h handle is DWORD on top of stack
  678.         mailbox: wait for and get next message
  679.         keyboard: wait for and get pointer to next input buffer
  680.         pointer: wait for and get next message
  681.         02h get next message from mailbox (task's handle on top of stack)
  682.         03h get next message from current task's mailbox
  683.         04h get the next input from keyboard (handle on top of stack)
  684.         05h get the next input from task's default keyboard
  685.         06h wait for input from any object in OBJECTQ (handle on stack)
  686.         07h wait for input from any object in task's default OBJECTQ
  687. Return: STACK: (if objectq) DWORD handle of object with input
  688.            (otherwise)  DWORD number of bytes
  689.                 DWORD address
  690. Notes:    for a keyboard in keystroke mode, the input buffer is a single byte
  691.       containing the character code as returned by the BIOS; the BIOS scan
  692.       code is available via the STATUS call if the character is zero
  693.     for a keyboard in field mode, the input buffer format is determined
  694.       by the field table header for the window the keyboard is attached to
  695.     keyboard input buffers and mailbox message buffers may be invalidated
  696.       by the next READ, ERASE, CLOSE, or FREE message to the same object
  697. SeeAlso: AH=12h/BH=05h"OBJECT"
  698.  
  699. Format of pointer message:
  700. Offset    Size    Description
  701.  00h    WORD    row
  702.  02h    WORD    column
  703.  04h    BYTE    status
  704.         bit 6: set when press/release mode active and button released
  705.         bits 7-2: number of clicks-1 if multiple-click mode active
  706.         bits 1,0: button pressed (00=none,01=button1,10=button2)
  707.  05h    BYTE    field number or zero (APILEVEL >= 2.00 only)
  708. ----------1512--BX0400-----------------------
  709. INT 15 - TopView - SEND MESSAGE - "READ" - WAIT FOR TIMER TO EXPIRE
  710.     AH = 12h
  711.     BX = 0400h
  712.     STACK: DWORD timer's handle
  713. Return: after timer expires
  714.     STACK: DWORD time in 1/100 sec after midnight when timer expired
  715. ----------1512--BX0400-----------------------
  716. INT 15 - TopView - SEND MESSAGE - "APPLY" - WRITE PANEL TO WINDOW
  717.     AH = 12h
  718.     BX = 0400h
  719.     STACK: DWORD handle of panel object
  720.            DWORD window's handle (or 0 for current task's window)
  721.            DWORD length of panel name
  722.            DWORD pointer to panel name
  723. Return: STACK: DWORD handle of keyboard or 0
  724.            DWORD handle of window which was used
  725. Notes:    status of APPLY may be checked with STATUS message
  726.     panel MUST have the following format
  727.       first byte must be 1Bh (i.e. must start with a stream)
  728.       first opcode in stream must be E5h
  729.         single byte arg of opcode is interpreted thus:
  730.           bits 7,6    11 means create new window
  731.             10 means create new field table for existing window
  732.             01 means use existing window and field table
  733.           bit 5 if set, panel contains a field table 
  734.             (creates a new keyboard and puts it in field mode)
  735.           bit 4 if set, panel contains input fields
  736.           bit 3 if set, panel contains select fields but no input fields
  737.     if the panel contains input or select fields, a keyboard handle is
  738.       returned; either the window's current open keyboard or a
  739.       newly-created keyboard object.  The caller should read that keyboard
  740.       to obtain input from the panel.
  741. ----------1512--BH05------------------------
  742. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE TO OBJECT
  743.     AH = 12h
  744.     BH = 05h
  745.     BL = object
  746.         00h handle is DWORD on top of stack
  747.         timer: start timer to end at a specified time
  748.         keyboard: add input buffer to queue
  749.         pointer: move pointer icon to specified position
  750.         02h send message by value/status=0 to mbox (task's handle on stack)
  751.         03h send message by value/status=0 to current task's mailbox
  752.         04h add input buffer to KEYBOARD queue (handle on top of stack)
  753.         05h add input buffer to task's default KEYBOARD queue
  754.         06h add an object to OBJECTQ (handle on top of stack)
  755.         07h add an object to task's default OBJECTQ
  756.     STACK: (if mailbox)  DWORD length
  757.                  DWORD address
  758.            (if keyboard) DWORD status (scan code in keystroke mode)
  759.                  DWORD length (should be 1 in keystroke mode)
  760.                  DWORD address
  761.            (if objectq)  DWORD handle of object to add
  762.            (if timer)    DWORD 1/100ths seconds since midnight (actually
  763.                    only accurate to 1/18 sec)
  764.            (if pointer)  DWORD column relative to origin of window
  765.                  DWORD row relative to origin of window
  766. Notes:    under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  767.     the data and status written to a keyboard object must match the format
  768.       returned by the keyboard object in the current mode
  769.     the pointer position is scaled according to the current scaling factors
  770. SeeAlso: AH=12h/BH=04h
  771. ----------1512--BH05-------------------------
  772. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE STRING TO WINDOW
  773.     AH = 12h
  774.     BH = 05h
  775.     BL = window to write to
  776.         00h DWORD on top of stack is window handle
  777.         01h write string to task's default window
  778.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  779.         0Dh (DV 2.26+) default window of parent of current task
  780.     STACK: DWORD object handle if handle passed on stack
  781.            DWORD total length of string (high word == 0)
  782.            DWORD address of string to display
  783. Return: indicated actions performed
  784.     a. non-control characters are displayed (opcodes DEh and DFh control
  785.        whether the attributes are left or changed to the current attrib)
  786.     b. CR/LF/BS/Tab cause the usual cursor movement
  787.     c. ESC starts a data structure with additional commands if following
  788.        byte is less than 20h; otherwise, it is written to the window
  789.     STACK:    DWORD handle of new window if window stream opcode E6h
  790.         else nothing
  791.  
  792. Data Structure:
  793.     MAGIC  DB  1Bh
  794.     MODE   DB  ?   ; 00h, 01h, 10h, 14h-1Fh legal
  795.     LENGTH DW  ?   ; length of remainder in bytes
  796.     var-length fields follow, each an OPCODE followed by
  797.          zero or more args
  798.  
  799. MODE 00h (set or display values) "WINDOW STREAM"
  800.     Opcodes:args
  801.     00h  display 20h blanks with the default attribute
  802.     01h-1Fh display OPCODE blanks with the default attribute
  803.     20h  display char with default attribute 20h times
  804.          BYTE char to repeat
  805.     21h-3Fh display char with default attribute OPCODE-20h times
  806.          BYTE char to repeat
  807.     40h  display 20h blanks with specified attribute
  808.          BYTE attribute of blanks
  809.     41h-5Fh display OPCODE-40h blanks with specified attribute
  810.          BYTE attribute of blanks
  811.     60h  display next 20h characters
  812.          20h BYTEs characters to display
  813.     61h-7Fh display next OPCODE-60h characters
  814.          N BYTEs characters to display
  815.     80h-87h     display N blanks with default attribute
  816.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  817.               [000h means 800h]
  818.     88h-8Fh display N copies of the character
  819.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  820.               [000h means 800h]
  821.          BYTE character to repeat
  822.     90h-97h     display N blanks with specified attribute
  823.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  824.               [000h means 800h]
  825.          BYTE attribute
  826.     98h-9FH     display string at logical cursor pos
  827.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  828.               [000h means 800h]
  829.          N BYTEs string to display
  830.     A0h  set logical cursor row
  831.          BYTE row number (0 is top)
  832.     A1h  set logical cursor column
  833.          BYTE column number (0 is leftmost)
  834.     A2h  set top edge of scrolling region
  835.          BYTE row
  836.     A3h  set left edge of scrolling region
  837.          BYTE column
  838.     A4h  set row of physical window position
  839.          BYTE line
  840.     A5h  set column of physical window position
  841.          BYTE column
  842.     A6h  set height of physical window
  843.          BYTE #rows
  844.     A7h  set width of physical window
  845.          BYTE #columns
  846.     A8h  set viewport row
  847.          BYTE row
  848.     A9h  set viewport column
  849.          BYTE column
  850.     AAh  set virtual screen height [contents of window unpredictable after]
  851.          BYTE rows
  852.     ABh  set virtual screen width [contents of window unpredictable after]
  853.          BYTE columns
  854.     ACh-AEh     unused
  855.     AFh  set compatible/preferred video modes
  856.          BYTE compatibility/preference mask
  857.         bit 7    compatible with monochrome
  858.         bit 6    compatible with color text, EGA/VGA graphics
  859.         bit 5    compatible with medium-resolution CGA graphics
  860.         bit 4    compatible with high-resolution CGA graphics
  861.         bit 3    prefer monochrome
  862.         bit 2    prefer color text, EGA/VGA graphics
  863.         bit 1    prefer medium-resolution CGA graphics
  864.         bit 0    prefer high-resolution CGA graphics
  865.     B0h  move logical cursor down
  866.          BYTE #rows (signed, negative values move up)
  867.             [if #rows=0 and hardware cursor owner, update hw crsr]
  868.     B1h  move logical cursor right
  869.          BYTE #cols (signed, negative values move left)
  870.             [if #cols=0 and hardware cursor owner, update hw crsr]
  871.     B2h  shift top edge of scrolling region
  872.          BYTE #rows (signed)
  873.     B3h  shift left edge of scrolling region
  874.          BYTE #cols (signed)
  875.     B4h  shift physical window down
  876.          BYTE #lines (signed)
  877.     B5h  shift physical window right
  878.          BYTE #columns (signed)
  879.     B6h  expand physical window vertically
  880.          BYTE #lines (signed)
  881.     B7h  expand physical window horizontally
  882.          BYTE #columns (signed)
  883.     B8h  adjust viewport row
  884.          BYTE #rows (signed)
  885.     B9h  adjust viewport column
  886.          BYTE #columns (signed)
  887.     BAh  adjust virtual screen height [contents of window unpredict after]
  888.          BYTE #rows to increase (signed)
  889.     BBh  adjust virtual screen width [contents of window unpredictbl after]
  890.          BYTE #cols to increase (signed)
  891.     BCh-BFh     reserved (currently unused)
  892.     C0h  set logical cursor position
  893.          BYTE row number (0 is top border)
  894.          BYTE column number (0 is left border)
  895.     C1h  set top left corner of scrolling region
  896.          BYTE row
  897.          BYTE column
  898.     C2h  set physical window pos
  899.          BYTE upper left row (no top border if 0)
  900.          BYTE upper left column (no left border if 0)
  901.     C3h  set current window size
  902.          BYTE #rows
  903.          BYTE #cols
  904.     C4h  set upper left corner of viewport (portion of virtual screen
  905.          displayed in window)
  906.          BYTE row
  907.          BYTE column
  908.     C5h  set size of virtual screen [contents unpredictable afterwards]
  909.          BYTE #rows
  910.          BYTE #cols
  911.     C6h  unused
  912.     C7h  unused
  913.     C8h  set logical cursor relative to current position
  914.          BYTE number of rows to move down (signed)
  915.          BYTE number of columns to move right (signed)
  916.           [if #rows=#cols=0 and hardware cursor owner, update hw cursr]
  917.     C9h  shift top left corner of scrolling region
  918.          BYTE #rows (signed)
  919.          BYTE #cols (signed)
  920.     CAh  set window pos relative to current position
  921.          BYTE number of rows to shift down (signed)
  922.          BYTE number of columns to shift right (signed)
  923.     CBh  set window size relative to current size
  924.          BYTE number of rows to expand (signed)
  925.          BYTE number of cols to expand (signed)
  926.     CCh  shift viewport relative to current position
  927.          BYTE rows to shift (signed)
  928.          BYTE cols to shift (signed)
  929.     CDh  resize virtual screen
  930.          BYTE #rows to expand (signed)
  931.          BYTE #cols to expand (signed)
  932.     CEh  scroll text when using E8h-EBh/F8h-FBh opcodes (default)
  933.     CFh  scroll attributes when using  E8h-EBh/F8h-FBh opcodes
  934.     D0h  allow window frame to extend beyond screen
  935.     D1h  always display a complete frame, even if window extends beyond 
  936.          edge of screen
  937.     D2h  allow DV to change logical colors on video mode switch (default)
  938.     D3h  application changes logical attributes
  939.     D4h  window is visible [must redraw to actually make visible]
  940.     D5h  window is hidden [must redraw to actually remove]
  941.     D6h  window has frame (default)
  942.     D7h  window unframed [must redraw to actually remove frame]
  943.     D8h  READ/READN will read characters from window (default)
  944.     D9h  READ/READN will read attributes from window
  945.     DAh  use logical attributes, which may be remapped
  946.         attributes
  947.            1 normal text
  948.            2 highlighted normal text
  949.            3 help text
  950.            4 highlighted help text
  951.            5 error message
  952.            6 highlighted error message
  953.            7 emphasized text
  954.            8 marked text
  955.            9-16 are reverse video versions of 1-8
  956.     DBh  use physical attributes for characters
  957.     DCh  enable special actions for control characters (default)
  958.     DDh  disable special control char handling, all chars displayable by
  959.          BIOS TTY call
  960.     DEh  write both character and attribute (default)
  961.     DFh  write character only, leave attribute untouched
  962.     E0h  repeat following commands through E1h opcode
  963.          BYTE number of times to repeat (00h means 256 times)
  964.     E1h  end of commands to repeat, start repeating them
  965.     E2h  set current output color
  966.          BYTE color
  967.     E3h  clear virtual screen from scroll origin to end using current color
  968.     E4h  redraw window
  969.     E5h  select menu style
  970.          BYTE style (normally 18h)
  971.         bits 5,4 = 01 use two-letter menu entries for remainder of
  972.           this stream
  973.     E5h  (panel file only)
  974.          BYTE modifier
  975.         bits 7,6 = 11 panel stream creates new window
  976.              = 10 panel defines new field table for existing window
  977.              = 01 panel stream uses existing window & field table
  978.         bit 5 = 1 stream contains a field table (create kyboard object)
  979.         bit 4 = 1 stream defines input fields (create keyboard object)
  980.         bit 3 = 1 stream defines select fields but not input fields
  981.         bit 2 = 1 stream defines exclusive input window (DV 2.2)
  982.         bit 1 reserved
  983.         bit 0 reserved
  984.     E6h  create new window and perform rest of manipulations in new window
  985.          BYTE number of rows
  986.          BYTE number of columns
  987.          Return: DWORD object handle of new window returned on stack at end
  988.     E7h  no operation
  989.     E8h  scroll area up (top left corner defined by opcode C1h)
  990.          BYTE height
  991.          BYTE width
  992.     E9h  scroll area down (top left corner defined by opcode C1h)
  993.          BYTE height
  994.          BYTE width
  995.     EAh  scroll area left (top left corner defined by opcode C1h)
  996.          BYTE height
  997.          BYTE width
  998.     EBh  scroll area right (top left corner defined by opcode C1h)
  999.          BYTE height
  1000.          BYTE width
  1001.     ECh  set logical attributes for window contents
  1002.          BYTE video modes command applies to
  1003.         bit 7    monochrome
  1004.         bit 6    color text, EGA/VGA graphics
  1005.         bit 5    medium-resolution CGA graphics
  1006.         bit 4    high-resolution CGA graphics
  1007.          BYTE which attributes to set
  1008.         bit 7  if set, copy single following byte to indicated attribs
  1009.         bits 4-6  # of first attribute to change - 1
  1010.         bits 0-3  # of consecutive attributes to change
  1011.          N BYTEs new attributes
  1012.     EDh  set logical attributes for window frame
  1013.          BYTE video modes command applies to (see opcode ECh)
  1014.          BYTE which attributes to set
  1015.         bit 7  if set, copy single following byte to indicated attrs
  1016.         bits 4-6  # of first attribute to change - 1
  1017.         bits 0-3  # of consecutive attributes to change
  1018.          N BYTEs new attributes
  1019.           attributes
  1020.                1 = top left corner
  1021.                2 = top right corner
  1022.                3 = bottom left corner
  1023.                4 = bottom right corner
  1024.                5 = top edge
  1025.                6 = bottom edge
  1026.                7 = left edge
  1027.                8 = right edge
  1028.     EEh  set characters for window frame
  1029.          BYTE video modes command applies to (see opcode ECh)
  1030.          BYTE which characters to set
  1031.         bit 7  if set, copy single following byte to indicated chars
  1032.         bits 4-6  # of first char to change - 1
  1033.         bits 0-3  # of consecutive chars to change
  1034.          N BYTEs new chars (same relative position as attributes above)
  1035.     EFh  set window name
  1036.          BYTE length of name (should be in range 0 to logical screen width)
  1037.          N BYTEs name
  1038.     F0h  clear input field to blanks
  1039.          BYTE field number
  1040.     F1h  fill input field with character
  1041.          BYTE field number
  1042.          BYTE char
  1043.     F2h  set color of input field
  1044.          BYTE field number (1-N)
  1045.          BYTE attribute
  1046.     F3h  set initial contents of input field
  1047.          BYTE field number (1-N)
  1048.          N BYTEs enough chars to exactly fill field as defined by op FFh
  1049.     F4h  position cursor to start of specific input field
  1050.          BYTE field number (1-N)
  1051.     F5h  change field table entry
  1052.          BYTE field number
  1053.          7-8 BYTEs field table entry (see opcode FFh below)
  1054.     F6h  set field type
  1055.          BYTE field number
  1056.          BYTE type
  1057.             00h inactive
  1058.             40h output field
  1059.             80h input field
  1060.             C0h deselected field
  1061.             C2h selected field
  1062.     F7h  "broadcast write"    write data to fields with program output bit
  1063.         set in field table entry, in field number order
  1064.          N BYTEs (total length of all program output fields)
  1065.     F8h  scroll field up a line
  1066.          BYTE field number
  1067.     F9h  scroll field down a line
  1068.          BYTE field number
  1069.     FAh  scroll field left
  1070.          BYTE field number
  1071.     FBh  scroll field right
  1072.          BYTE field number
  1073.     FCh  set field table header
  1074.          BYTE number of fields (must be <= existing number of fields)
  1075.          BYTE screen behavior bits
  1076.         bit 7  reserved
  1077.         bit 6  set if menu items may be selected via keyboard
  1078.         bit 5  set if left mouse button may terminate entry
  1079.         bit 4  set if right mouse button may terminate entry
  1080.         bit 3  if set, select fields return contents or blanks rather
  1081.             than 'Y' or 'N'
  1082.         bit 2  if set, modified bits reset on return to application
  1083.         bits 0,1 = 00 no data returned on read of keyboard
  1084.                01 data returned as array of chars containing
  1085.                 all fields packed together, with no field
  1086.                 numbers
  1087.                10 data returned as numbered variable-length
  1088.                 records for all fields
  1089.                11 data returned as numbered variable-length
  1090.                 records for the fields which were modified
  1091.          BYTE current input field (updated by DESQview)
  1092.          BYTE current select field (updated by DESQview)
  1093.          BYTE attribute for select fields when they are pointed at
  1094.          BYTE attribute for select fields which have been selected
  1095.     FDh  reset modified bit for all fields
  1096.     FEh  reset selected and modified bits for all fields
  1097.     FFh  set up input fields
  1098.          6 BYTEs table header (see opcode FCh above)
  1099.          the field table entries, one for each field
  1100.          BYTE start row       \
  1101.          BYTE start column  \ if menu selection and start is to
  1102.          BYTE end row        / right or below end, select from kbd only
  1103.          BYTE end column   /
  1104.          BYTE field type
  1105.             bits 7,6 = 00 inactive (non-entry) field
  1106.                    01 echos keystrokes input to make menu selection
  1107.                    10 fill-in field
  1108.                    11 select field
  1109.             bit 5  field can be filled by broadcast write (F7h opcode)
  1110.             bit 4  reserved
  1111.             bit 3  reserved
  1112.             bit 2  reserved
  1113.             bit 1  set if field selected
  1114.             bit 0  set if field modified
  1115.          BYTE modifier
  1116.               if type is fill-in, then bit flags to determine behavior
  1117.               bit 7     if set, automatically enter CR when field full
  1118.               bit 6     move to next field when current field is full
  1119.               bit 5     if set, enter text from right end (for numbers)
  1120.               bit 4     if set, force input to uppercase
  1121.               bit 3     if set, clear old contents on first keystroke
  1122.               bit 2     if set, input returned when cursor moves out
  1123.                  of modified field (API level 2.02+)
  1124.               bit 1     reserved
  1125.               bit 0     reserved
  1126.               if select field, first key to press to activate
  1127.               00h if have to point-&-click or is an extended-ASCII
  1128.                   keystroke (only if two-key menus enabled)
  1129.          BYTE (select field only) normal color of field
  1130.          BYTE second key for select field.  This byte is present iff
  1131.               two-letter menu entries selected with opcode E5h, and
  1132.               in that case is present regardless of field type
  1133.          Note: DESQview uses and updates the actual copy of the information
  1134.            which is contained in the stream.  Thus this info must remain
  1135.            intact until after the data entry is complete.
  1136.  
  1137. MODE 01h "QUERY STREAM" (valid only for those opcodes listed here)
  1138.     A0h return logical cursor row in next byte
  1139.     A1h return logical cursor column in next byte
  1140.     A2h return top row of scrolling region in next byte
  1141.     A3h return left column of scrolling region in next byte
  1142.     A4h return row of physical window origin in next byte
  1143.     A5h return column of physical window origin in next byte
  1144.     A6h return height of physcial window in next byte
  1145.     A7h return width of physical window in next byte
  1146.     A8h return row of viewport origin in next byte
  1147.     A9h return column of viewport origin in next byte
  1148.     AAh return height of virtual screen in next byte
  1149.     ABh return width of virtual screen in next byte
  1150.     AFh return current video mode in next byte
  1151.     C0h return current logical cursor position in next two bytes
  1152.     C1h return top left corner of scrolling region in next two bytes
  1153.     C2h return current window position in next two bytes
  1154.     C3h return current window size in next two bytes
  1155.     C4h return current viewport origin in next two bytes
  1156.     C5h return current virtual screen size in next two bytes
  1157.     D0h \ overwritten with D0h if frames may fall off screen edge
  1158.     D1h /               D1h if frames always displayed entirely
  1159.     D2h \ overwritten with D2h if DESQview controls color palette
  1160.     D3h /               D3h if application changes color palette
  1161.     D4h \ overwritten with D4h if window visible
  1162.     D5h /               D5h if window hidden
  1163.     D6h \ overwritten with D6h if window has frame
  1164.     D7h /               D7h if window unframed
  1165.     D8h \ overwritten with D8h if reading characters from window
  1166.     D9h /               D9h if reading attributes from window
  1167.     DAh \ overwritten with DAh if using logical attributes
  1168.     DBh /               DBh if using physical attributes
  1169.     DCh \ overwritten with DCh if TTY control char interpretation on
  1170.     DDh /               DDh if TTY control char interpretation off
  1171.     DEh \ overwritten with DEh if writing both characters and attributes
  1172.     DFh /               DFh if leaving attributes untouched
  1173.     E2h return current color in next byte
  1174.     ECh get logical attributes for window contents
  1175.         BYTE execute call if currently in specified video mode
  1176.         bit 7    monochrome
  1177.         bit 6    color text, EGA/VGA graphics
  1178.         bit 5    medium-resolution CGA graphics
  1179.         bit 4    high-resolution CGA graphics
  1180.         BYTE which attributes to get
  1181.         bit 7 unused???
  1182.         bits 4-6 first attribute to get - 1
  1183.         bits 0-3 # consecutive attributes
  1184.         N BYTEs buffer to hold attributes
  1185.     EDh get logical attributes for window frame
  1186.         BYTE execute call if currently in video mode (see opcode ECh)
  1187.         BYTE which attributes to get
  1188.         bit 7 unused???
  1189.         bits 4-6 first attribute to get - 1
  1190.         bits 0-3 # consecutive attributes
  1191.         N BYTEs buffer to hold attributes
  1192.     EEh get characters for window frame
  1193.         BYTE execute call if currently in video mode (see opcode ECh)
  1194.         BYTE which attributes to get
  1195.         bit 7 unused???
  1196.         bits 4-6 first char to get - 1
  1197.         bits 0-3 # consecutive chars
  1198.         N BYTEs buffer to hold chars
  1199.     EFh return first N characters of current window name
  1200.         BYTE    max length of returned name
  1201.         N BYTEs buffer to hold window name
  1202.     F3h return contents of specified field
  1203.         BYTE field number
  1204.         N BYTEs buffer to hold field contents (size exactly equal to field
  1205.             size)
  1206.     F5h get field table entry
  1207.         BYTE field number
  1208.         7-8 BYTEs buffer to hold field table entry
  1209.            Notes: DV < 2.26 always returns 7 bytes
  1210.               DV 2.26+ w/ APILEVEL < 2.26 returns 8 bytes iff field
  1211.             table is using 8-byte entries and eighth byte after
  1212.             F5h is E7h (NOP); otherwise, 7 bytes are returned
  1213.               DV 2.26+ w/ APILEVEL > 2.26 returns 7 or 8 bytes
  1214.             depending on the field table entry size
  1215.     F6h get type of a field
  1216.         BYTE field number
  1217.         BYTE type
  1218.     FCh get field table header
  1219.         6 BYTEs buffer to store header
  1220.  
  1221. MODE 10h "MANAGER STREAM" (valid only for opcodes listed here)
  1222.     00h allow window to be moved horizontally
  1223.     01h allow window to be moved vertically
  1224.     02h allow window to change width
  1225.     03h allow window to change height
  1226.     04h allow window to be scrolled horizontally
  1227.     05h allow window to be scrolled vertically
  1228.     06h allow "Close Window" menu selection for application
  1229.     07h allow "Hide Window" menu selection for application
  1230.     08h allow application to be suspended ("Rearrange/Freeze")
  1231.     0Eh allow "Scissors" menu
  1232.     10h allow DESQview main menu to be popped up
  1233.     11h allow "Switch Windows" menu
  1234.     12h allow "Open Window" menu
  1235.     13h allow "Quit" menu selection
  1236.     20h-33h opposite of 00h-13h, disallow specified action
  1237.     40h notify if horizontal position of window changes
  1238.     41h notify if vertical position of window changes
  1239.     42h notify if width of window changes
  1240.     43h notify if height of window changes
  1241.     44h notify if window scrolled horizontally
  1242.     45h notify if window scrolled vertically
  1243.     46h notify if window is closed--program has to clean up and exit itself
  1244.     47h notify if window is hidden
  1245.     48h notify if "?" on main menu selected
  1246.     49h notify if pointer message sent to window
  1247.     4Ah notify if window is placed in foreground
  1248.     4Bh notify if window is placed in background
  1249.     4Ch notify if video mode changes
  1250.     4Dh notify if "Scissors" menu "Cut" option selected
  1251.     4Eh notify if "Scissors" menu "Copy" option selected
  1252.     4Fh notify if "Scissors" menu "Paste" option selected
  1253.     50h notify if DESQview main menu about to pop up
  1254.     51h notify if DESQview main menu popped down
  1255.     60h-71h     opposite of 40h-51h: don't notify on specified event
  1256.     84h attach window to parent task's window (both move together)
  1257.     85h detach window from parent task's window (may move independently)
  1258.     86h disable background operation for application
  1259.     87h enable running in background
  1260.     88h set minimum size of physical window
  1261.         BYTE rows
  1262.         BYTE columns
  1263.     89h set maximum size of physical window
  1264.         BYTE rows
  1265.         BYTE cols
  1266.     8Ah set primary asynchronous notification routine
  1267.         DWORD address of routine, 0000h:0000h means none (see also below)
  1268.     8Bh set async notification parameter
  1269.         DWORD 32-bit value passed to 8Ah async routine in DS:SI
  1270.     ACh (DV2.2+) perform regular select field attribute processing
  1271.     ADh (DV2.2+) protect attributes in selected field from being lost
  1272.     AEh make window default notify window for owning app (API level 2.00+)
  1273.     AFh set selected field marker character
  1274.         BYTE character to display at left edge of selected fields
  1275.     BCh set standard field processing mode 
  1276.     BDh set alternate field processing mode (enables cursor pad for menus)
  1277.     BEh disables changing reverse logical attributes with ECh opcode
  1278.     BFh enables changing reverse logical attributes with ECh opcode
  1279.     C0h make current window topmost in system
  1280.     C1h force current process into foreground
  1281.     C2h make current window topmost in process
  1282.     C3h position mouse pointer relative to origin of current field
  1283.         BYTE rows below upper left corner of field
  1284.         BYTE columns to right of upper left corner of field
  1285.     C4h position mouse pointer relative to origin of given field
  1286.         BYTE field number
  1287.         BYTE rows below upper left corner of field
  1288.         BYTE columns to right of upper left corner of field
  1289.     C5h orphan current window (also hides it)
  1290.         Note: must be last in stream; all subsequent commands ignored
  1291.     C6h show all windows for this process
  1292.     C7h hide all windows for this process
  1293.     C8h suspend process and hide all its windows
  1294.     C9h force current process into background
  1295.     CAh make current window bottom-most in process
  1296.     CBh cancel current window manager operation, remove DV menu, give 
  1297.         control to topmost application
  1298.     CCh orphan window and give it to the system for use as paste data
  1299.     CEh reorder windows
  1300.         DWORD pointer to null-terminated list of words
  1301.           each word is segment of object handle for a window
  1302.     FFh no operation
  1303.  
  1304. MODES 14h to 1Fh "USER STREAMS"
  1305.     normally NOPs, but may be defined by SETESC message to invoke FAR
  1306.     routines, one for each mode number
  1307.       on entry to handler,
  1308.         DS:SI -> first byte of actual stream (not header)
  1309.         CX = #bytes in stream
  1310.         ES:DI = window's handle
  1311.  
  1312. Asynchronous notification routine defined by manager stream 8Ah called with:
  1313.     ES:DI = handle of window
  1314.     DS:SI is 32-bit value set by 8Bh manager stream opcode
  1315.        mailbox contains message indicating event
  1316.           Opcode
  1317.            40h  horizontal movement
  1318.            DWORD object handle of window
  1319.            BYTE     new row
  1320.            BYTE     new col
  1321.            41h  vertical movement
  1322.            DWORD object handle of window
  1323.            BYTE     new row
  1324.            BYTE     new col
  1325.            42h  horizontal size change
  1326.            DWORD object handle of window
  1327.            BYTE     new rows
  1328.            BYTE     new cols
  1329.            43h  vertical size change
  1330.            DWORD object handle of window
  1331.            BYTE     new rows
  1332.            BYTE     new cols
  1333.            44h  scrolled horizontally
  1334.            DWORD object handle of window
  1335.            BYTE     mouse row within window
  1336.            BYTE     mouse column within window
  1337.            BYTE     field mouse is on, 0 if none
  1338.            BYTE     amount moved: >0 right, <0 left, 0 done
  1339.            45h  scrolled vertically
  1340.            DWORD object hande of window
  1341.            BYTE     mouse row within window
  1342.            BYTE     mouse column within window
  1343.            BYTE     field mouse is on, 0 if none
  1344.            BYTE     amount moved: >0 down, <0 up, 0 done
  1345.            46h  window close request
  1346.            DWORD object handle of window
  1347.            BYTE     mouse pointer row
  1348.            BYTE     mouse pointer column
  1349.            BYTE     field mouse is on, 0 if none
  1350.            47h  application's windows hidden
  1351.            48h  Help for Program selected
  1352.            DWORD object handle of window
  1353.            BYTE     mouse pointer row
  1354.            BYTE     mouse pointer column
  1355.            BYTE     field mouse is on, 0 if none
  1356.            49h  pointer message sent to window
  1357.            DWORD pointer handle which received message
  1358.            4Ah  switched to window from another ("raise")
  1359.            4Bh  switched away from the window ("lower")
  1360.            4Ch  video mode changed
  1361.            BYTE new BIOS video mode
  1362.            4Dh  Scissors/cUt selected
  1363.            DWORD object handle of window
  1364.            BYTE     row of upper left corner
  1365.            BYTE     column of upper left corner
  1366.            BYTE     field number ul corner is in, 0=none
  1367.            DWORD handle of orphaned window created with
  1368.              copy of data from specified region
  1369.            BYTE     height of region
  1370.            BYTE     width of region
  1371.            4Eh  Scissors/Copy selected
  1372.            DWORD object handle of window
  1373.            BYTE     row of upper left corner
  1374.            BYTE     column of upper left corner
  1375.            BYTE     field number ul corner is in, 0=none
  1376.            DWORD handle of orphaned window created with
  1377.              copy of data from specified region
  1378.            BYTE     height of region
  1379.            BYTE     width of region
  1380.            4Fh  Scissors/Paste selected
  1381.            DWORD object handle of window
  1382.            BYTE     row of upper left corner
  1383.            BYTE     column of upper left corner
  1384.            BYTE     field number ul corner is in, 0=none
  1385.            DWORD handle of orphaned window with data
  1386.            BYTE     height of region
  1387.            BYTE     width of region
  1388.             Note: orphaned data window should be adopted or freed
  1389.                 when done
  1390.            50h  main menu about to pop up
  1391.            51h  main menu popped down
  1392. Return: all registers unchanged
  1393. ----------1512--BH06-------------------------
  1394. INT 15 - DESQview 2.20+ - SEND MESSAGE - "SETPRI" - SET PRIORITY WITHIN OBJECTQ
  1395.     AH = 12h
  1396.     BH = 06h
  1397.     BL = object
  1398.         00h object handle in DWORD on top of stack
  1399.         mailbox, keyboard, pointer, or timer
  1400.         04h given task's keyboard (task's handle on top of stack)
  1401.         05h current task's default keyboard
  1402.     STACK: DWORD new priority of object in task's OBJECTQ 
  1403. Notes:    initially all objects have the same default value.  Should only make 
  1404.       relative adjustments to this default value.
  1405.     when changing priorities, all objects already on the objectq are
  1406.       reordered
  1407. SeeAlso: AH=12h/BH=07h
  1408. ----------1512--BH07-------------------------
  1409. INT 15 - DESQview 2.20+ - SEND MESSAGE - "GETPRI" - GET PRIORITY WITHIN OBJECTQ
  1410.     AH = 12h
  1411.     BH = 07h
  1412.     BL = object
  1413.         00h object handle in DWORD on top of stack
  1414.         mailbox, keyboard, pointer, or timer
  1415.         04h given task's keyboard (task's handle on top of stack)
  1416.         05h current task's default keyboard
  1417. Return: STACK: DWORD object priority
  1418. Note:    initially all objects have the same default value.  Should only make 
  1419.       relative adjustments to this default value.
  1420. SeeAlso: AH=12h/BH=06h
  1421. ----------1512--BH08-------------------------
  1422. INT 15 - TopView - SEND MESSAGE - "SIZEOF" - GET OBJECT SIZE
  1423.     AH = 12h
  1424.     BH = 08h
  1425.     BL = object
  1426.         00h handle in DWORD on top of stack
  1427.         window: total character positions in window
  1428.         timer: elapsed time since timer started
  1429.         pointer: number of messages queued to pointer object
  1430.         panel: number of panels in panel file
  1431.         keyboard: number of input buffers queued
  1432.         01h total chars in current task's default window
  1433.         02h number of messages in task's mailbox (task's handle on stack)
  1434.         03h number of messages in current task's mailbox
  1435.         04h number of input buffers queued in task's kbd (handle on stack)
  1436.         05h number of input buffers queued for current task's default kbd
  1437.         06h number of objects queued in OBJECTQ (task's handle on stack)
  1438.         07h number of objects queued in current task's OBJECTQ
  1439.         0Ch (DV 2.26+) total chars in window owning handle on top of stack
  1440.         0Dh (DV 2.26+) total chars in parent task's window
  1441. Return: DWORD on top of stack is result
  1442. Note:    for panel objects, a count of zero is returned if no panel file is open
  1443.       for the object
  1444. SeeAlso: AH=12h/BH=04h,AH=12h/BH=09h
  1445. ----------1512--BH09-------------------------
  1446. INT 15 - TopView - SEND MESSAGE - "LEN" - GET OBJECT LENGTH
  1447.     AH = 12h
  1448.     BH = 09h
  1449.     BL = object
  1450.         00h handle in DWORD on top of stack
  1451.         window: get chars/line
  1452.         timer: get 1/100 seconds remaining before timer expires
  1453.         01h get number of chars/line in current task's default window
  1454.         0Ch (DV 2.26+) get chars/line in window owning handle on top of stk
  1455.         0Dh (DV 2.26+) get chars/line in parent task's window
  1456. Return: DWORD on top of stack is length
  1457. SeeAlso: AH=12h/BH=08h
  1458. ----------1512--BH0A-------------------------
  1459. INT 15 - TopView - SEND MESSAGE - "ADDTO" - WRITE CHARS AND ATTRIBS TO WINDOW
  1460.     AH = 12h
  1461.     BH = 0Ah
  1462.     BL = window to write to
  1463.         00h window handle is DWORD on top of stack
  1464.         01h current task's default window
  1465.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1466.         0Dh (DV 2.26+) default window of parent of current task
  1467.     STACK:    DWORD count of attributes
  1468.         DWORD address of attribute string
  1469.         DWORD count of characters
  1470.         DWORD address of character string
  1471. Notes:    if one string is longer than the other, the shorter one will be reused
  1472.       until the longer one is exhausted
  1473.     the cursor is left just after the last character written
  1474. SeeAlso: AH=12h/BH=0Bh"WINDOW"
  1475. ----------1512--BH0A-------------------------
  1476. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SEND MAILBOX MESSAGE/STAT BY VALUE
  1477.     AH = 12h
  1478.     BH = 0Ah
  1479.     BL = mailbox to write to
  1480.         00h handle is DWORD on top of stack
  1481.         02h default mailbox of task whose handle is on top of stack
  1482.         03h current task's default mailbox
  1483.     STACK:    DWORD    status (low byte)
  1484.         DWORD    length of message
  1485.         DWORD    address of message
  1486. Notes:    the message is copied into either system or common memory
  1487.     insufficient memory normally causes the process to be aborted; under
  1488.       DESQview 2.2+, failed writes may return CF set instead (see AX=DE15h)
  1489. SeeAlso: AH=12h/BH=0Bh"MAILBOX"
  1490. ----------1512--BH0A-------------------------
  1491. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SET OBJECT BITS
  1492.     AH = 12h
  1493.     BH = 0Ah
  1494.     BL = object
  1495.         00h handle is DWORD on top of stack
  1496.         timer: start timer for specified interval
  1497.         pointer: set control flags
  1498.         keyboard: set control flags
  1499.         04h set control flags on KEYBOARD object (handle on top of stack)
  1500.         05h set control flags on task's default KEYBOARD object
  1501.     STACK: (if timer)   DWORD duration in 1/100 seconds
  1502.            (otherwise)  DWORD bits to set
  1503. SeeAlso: AH=12h/BH=0Bh"OBJECT"
  1504.  
  1505. For keyboard objects, the bits have the following significance:
  1506.     bit 15 reserved, can't be set
  1507.     bit 14 unused
  1508.     bit 13 reserved, can't be set
  1509.     bit 12-6 unused
  1510.     bit 5  (DV 2.2+) exclusive input
  1511.     bit 4  filter all keys (used with handler established by SETESC)
  1512.         if 0, only keys that would normally be displayed are filtered
  1513.     bit 3  program continues executing while input in progress
  1514.     bit 2  insert mode active for field mode
  1515.     bit 1  hardware cursor displayed when task is hardware cursor owner
  1516.         must be set if keyboard in field mode and field table includes
  1517.         input fields
  1518.     bit 0  keyboard is in field mode rather than keystroke mode
  1519.  
  1520. For pointer objects, the bits have the following significance:
  1521.     bit 15 reserved, can't be set
  1522.     bit 14-8 unused
  1523.     bit 7  mouse pointer is hidden while in window
  1524.     bit 6  get messages even if window not topmost
  1525.     bit 5  get messages even if window not foreground
  1526.     bit 4  multiple clicks separated by less than 1/3 second are counted
  1527.         and returned in a single message
  1528.     bit 3  pointer position is relative to screen origin, not window origin
  1529.     bit 2  send message on button release as well as button press
  1530.     bit 1  (DV 2.23+) send message with row=FFFFh and col=FFFFh whenever
  1531.         pointer leaves the window
  1532.     bit 0  send message only on button activity, not movement
  1533.            DV-specific, and INT 15h/AX=DE0Fh must have been called first
  1534. ----------1512--BH0B-------------------------
  1535. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - WRITE ATTRIBUTES TO WINDOW
  1536.     AH = 12h
  1537.     BH = 0Bh
  1538.     BL = window to write attributes to
  1539.         00h handle is DWORD on top of stack
  1540.         01h current task's default window
  1541.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1542.         0Dh (DV 2.26+) default window of parent of current task
  1543.     STACK:    DWORD number of attributes to write
  1544.         DWORD address of attributes
  1545. Note:    the attributes are written starting at the current cursor position; the
  1546.       cursor is left just after the last position written
  1547. SeeAlso: AH=12h/BH=0Ah"WINDOW"
  1548. ----------1512--BH0B-------------------------
  1549. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - SEND MAILBOX MESSAGE/STAT BY REF
  1550.     AH = 12h
  1551.     BH = 0Bh
  1552.     BL = mailbox to write to
  1553.         00h handle is DWORD on top of stack
  1554.         02h default mailbox of task whose handle is on top of stack
  1555.         03h current task's default mailbox
  1556.     STACK:    DWORD    status (low byte)
  1557.         DWORD    length of message
  1558.         DWORD    address of message
  1559. Notes:    only a pointer to the message is stored, but the write may still fail
  1560.       due to insufficient memory
  1561.     under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  1562. SeeAlso: AH=12h/BH=0Ah"MAILBOX"
  1563. ----------1512--BH0B-------------------------
  1564. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - REMOVE OBJECT FROM OBJECTQ
  1565.     AH = 12h
  1566.     BH = 0Bh
  1567.     BL = OBJECTQ from which to remove all copies of a particular object
  1568.         06h OBJECTQ of task whose handle is on top of stack
  1569.         07h task's default OBJECTQ
  1570.     STACK:    DWORD    handle of object to remove
  1571. Note:    should be sent whenever an object is erased or closed
  1572. ----------1512--BH0B-------------------------
  1573. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - RESET OBJECT BITS
  1574.     AH = 12h
  1575.     BH = 0Bh
  1576.     BL = object
  1577.         00h handle is DWORD on top of stack
  1578.         pointer: reset control flags
  1579.         keyboard: reset control flags
  1580.         04h clear control flags on KEYBOARD object (handle on top of stack)
  1581.         05h clear control flags on task's default KEYBOARD object
  1582.     STACK:    DWORD    which bits to clear (see AH=12h/BH=0Ah"OBJECT")
  1583. SeeAlso: AH=12h/BH=0Ah"OBJECT"
  1584. ----------1512--BH0C-------------------------
  1585. INT 15 - TopView - SEND MESSAGE - "OPEN" - OPEN OBJECT
  1586.     AH = 12h
  1587.     BH = 0Ch
  1588.     BL = object
  1589.         00h handle is DWORD on top of stack
  1590.         window:      fill with given character from scroll origin to end
  1591.         keyboard: attach to a window
  1592.         timer:      open
  1593.         pointer:  start taking input for window
  1594.         panel:      associate with a panel file
  1595.         01h fill task's default window with given char from scrl org to end
  1596.         02h open given task's mailbox for input (task's handle on stack)
  1597.         03h open current task's mailbox
  1598.         04h attach a KEYBOARD to a window (handle on top of stack)
  1599.         05h attach task's default KEYBOARD to a window
  1600.         06h open a task's OBJECTQ (task's handle on top of stack)
  1601.         07h open current task's OBJECTQ
  1602.         0Ch (DV 2.26+) fill def window of task owning handle on top of stck
  1603.         0Dh (DV 2.26+) fill default window of parent of current task
  1604.      STACK: (if window)   DWORD character to fill with
  1605.         (if keyboard) DWORD handle of window to attach to
  1606.         (if pointer)  DWORD handle of window to attach to
  1607.         (if panel)    DWORD length of filename or resident panel
  1608.                   DWORD address of filename or resident panel
  1609.         (otherwise)   nothing
  1610. Notes:    if first byte of panel file name is 1Bh, then the "name" IS a panel
  1611.     if first two bytes of panel file "name" are C0hC3h, then the "name" IS
  1612.       the panel file
  1613.     result code of open may be retrieved with STATUS message
  1614.     logical cursor is left at scroll origin after filling window
  1615.     the task opening a mailbox becomes its owner, and the only task allowed
  1616.       to read the mailbox
  1617.     messages are only sent to a pointer object when the mouse is positioned
  1618.       in the window to which the pointer has been attached
  1619.     there is no need to explicitly open a timer object, as ADDTO and WRITE
  1620.       messages automatically open the timer
  1621. SeeAlso: AH=12h/BH=0Dh,AH=12h/BH=14h"LOCK"
  1622. ----------1512--BH0D-------------------------
  1623. INT 15 - TopView - SEND MESSAGE - "CLOSE" - CLOSE OBJECT
  1624.     AH = 12h
  1625.     BH = 0Dh
  1626.     BL = object
  1627.         00h handle is DWORD on top of stack
  1628.         timer:      close
  1629.         keyboard: detach from window and discard queued input
  1630.         pointer:  stop taking input
  1631.         panel:      close
  1632.         mailbox:  close, unlock, and discard any pending messages
  1633.         02h close given task's mailbox (task's handle on top of stack)
  1634.         03h close task's default mailbox
  1635.         04h close KEYBOARD object (handle on top of stack)
  1636.         05h close task's default KEYBOARD
  1637.         06h close givent task's OBJECTQ (task's handle on top of stack)
  1638.         07h close current task's OBJECTQ
  1639. Notes:    when an OBJECTQ is closed, each object in the OBJECTQ is sent an
  1640.       ERASE message (AH=12h/BH=0Eh)
  1641.     when a panel object is closed, the panel file and any panels currently
  1642.       in use are freed; window and keyboard objects created by APPLY are
  1643.       not affected, but field mode input ceases
  1644.     open but idle timer objects consume a small amount of CPU time
  1645. SeeAlso: AH=12h/BH=0Ch,AH=12h/BH=0Eh,AH=12h/BH=14h"LOCK"
  1646. ----------1512--BH0E-------------------------
  1647. INT 15 - TopView - SEND MESSAGE - "ERASE" - ERASE OBJECT
  1648.     AH = 12h
  1649.     BH = 0Eh
  1650.     BL = object
  1651.         00h handle is DWORD on top of stack
  1652.         window:      clear from scroll origin to end of window
  1653.         keyboard: discard input
  1654.         timer:      cancel current interval
  1655.         pointer:  discard all pending messages
  1656.         mailbox:  discard all pending messages
  1657.         01h clear task's default window from scroll origin to end
  1658.         02h discard all queued messages in mailbox (handle on top of stack)
  1659.         03h discard all queued messages in current task's default mailbox
  1660.         04h discard all input queued to KEYBOARD (handle on top of stack)
  1661.         05h discard all input queued to task's default KEYBOARD
  1662.         06h remove all objects from OBJECTQ (task's handle on top of stack)
  1663.         07h remove all objects from current task's OBJECTQ
  1664.         0Ch (DV 2.26+) clear window of task owning handle on top of stack
  1665.         0Dh (DV 2.26+) clear default window of parent of current task
  1666. Note:    when an OBJECTQ is erased, each object in the OBJECTQ is also erased
  1667. SeeAlso: AH=12h/BH=02h
  1668. ----------1512--BH0F-------------------------
  1669. INT 15 - TopView - SEND MESSAGE - "STATUS" - GET OBJECT STATUS
  1670.     AH = 12h
  1671.     BH = 0Fh
  1672.     BL = object
  1673.         00h handle is DWORD on top of stack
  1674.         timer:     is it running?
  1675.         pointer: return status of last message
  1676.         panel:     verify success of last OPEN or APPLY
  1677.         02h return status of last msg READ from mailbox (handle on stack)
  1678.         03h return status of last msg READ from task's default mailbox
  1679.         04h get status of last msg from task's KEYBOARD (task handle on stk)
  1680.         05h get status of last msg from task's default KEYBOARD
  1681.         06h return whether OBJECTQ is open or not (handle on top of stack)
  1682.         07h return whether task's default OBJECTQ is open or not
  1683. Return: DWORD on top of stack is status
  1684. Notes:    if object is a panel object, the status indicates the error code:
  1685.       00h successful
  1686.       14h panel name not in panel directory
  1687.       15h not enough memory to apply panel
  1688.       16h invalid panel format
  1689.       17h panel file already open
  1690.       81h-92h  DOS error codes+80h            \  codes > 80h indicate
  1691.       95h not enough memory to open panel file     > that the panel was
  1692.       98h null panel file name            /  not opened
  1693.     if object is a timer, the status is:
  1694.       00000000h open but not running
  1695.       40000000h open and running
  1696.       80000000h closed
  1697.     if object is an OBJECTQ, the status is:
  1698.       00000000h open
  1699.       80000000h closed
  1700.     if object is a keyboard in keystroke mode, the status is the extended
  1701.       character code (scan code) of teh last keystroke
  1702.     if object is a keyboard in field mode, the status indicates the reason
  1703.       for the last return from the field manager
  1704.       00h Enter key pressed
  1705.       01h Button 1 or keystroke selection
  1706.       02h Button 2
  1707.       03h validation
  1708.       04h auto Enter on field
  1709.       1Bh Escape pressed
  1710.       46h ^Break pressed
  1711.       other: extended code for key terminating input
  1712.     the status of mailbox messages sent by the window manager is always 80h
  1713.     the status of a pointer message is the same as the status field in the
  1714.       message
  1715. SeeAlso: AH=12h/BH=04h"READ"
  1716. ----------1512--BH10-------------------------
  1717. INT 15 - TopView - SEND MESSAGE - "EOF" - GET OBJECT EOF STATUS
  1718.     AH = 12h
  1719.     BH = 10h
  1720.     BL = object
  1721.         00h handle is DWORD on top of stack
  1722.         window: return TRUE if logical cursor past end of window
  1723.         mailbox: ???
  1724.         01h returns TRUE if logical cursor past end of task's def window
  1725.         02h return ??? for task's mailbox (task's handle on top of stack)
  1726.         03h return ??? for current task's mailbox
  1727.         0Ch (DV 2.26+) check log crsr of window owning handle on top of stk
  1728.         0Dh (DV 2.26+) check log cursor of window of parent task
  1729. Return: DWORD on top of stack is status
  1730. ----------1512--BH11-------------------------
  1731. INT 15 - TopView - SEND MESSAGE - "AT" - POSITION OBJECT CURSOR
  1732.     AH = 12h
  1733.     BH = 11h
  1734.     BL = window for which to move cursor
  1735.         00h window's handle is DWORD on top of stack
  1736.         01h task's default window
  1737.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1738.         0Dh (DV 2.26+) default window of parent of current task
  1739.     STACK: DWORD column
  1740.            DWORD row
  1741. ----------1512--BH11-------------------------
  1742. INT 15 - TopView - SEND MESSAGE - "SETNAME" - ASSIGN NAME TO MAILBOX
  1743.     AH = 12h
  1744.     BH = 11h
  1745.     BL = mailbox to name
  1746.         00h DWORD on top of stack is mailbox handle
  1747.         02h use given task's mailbox (task's handle on top of stack)
  1748.         03h use current task's default mailbox
  1749.     STACK: DWORD length of name
  1750.            DWORD address of name
  1751. SeeAlso: AX=DE0Eh
  1752. ----------1512--BX1100-----------------------
  1753. INT 15 - TopView - SEND MESSAGE - "SETSCALE" - SET POINTER SCALE FACTOR
  1754.     AH = 12h
  1755.     BX = 1100h
  1756.     STACK: DWORD object handle for pointer object
  1757.            DWORD number of colums to scale pointer position to
  1758.            DWORD number of rows to scale pointer position to
  1759. SeeAlso: AH=12h/BX=1200h
  1760. ----------1512--BH12-------------------------
  1761. INT 15 - TopView - SEND MESSAGE - "READN" - GET NEXT N OBJECT BYTES
  1762.     AH = 12h
  1763.     BH = 12h
  1764.     BL = window to read from
  1765.         00h handle is DWORD on top of stack
  1766.         01h read next N chars or attributes on task's default window
  1767.         0Ch (DV 2.26+) read window of task owning handle on top of stack
  1768.         0Dh (DV 2.26+) read default window of parent of current task
  1769.     STACK: DWORD count
  1770. Return: STACK: DWORD width of screen line
  1771.            DWORD address
  1772.            DWORD count actually read
  1773. Notes:    reading starts at the current logical cursor position; the cursor is
  1774.       updated to point at the character following the last one read
  1775.     any translucent blanks (FFh) which are visible on screen are changed
  1776.       to the character which is seen through them
  1777.     the string produced by the read is placed in an input buffer which may
  1778.       be reused by the next READ or READN of a window
  1779.     window stream opcodes D8h and D9h determine whether the read returns
  1780.       characters or attributes
  1781. SeeAlso: AH=12h/BH=04h"WINDOW",AH=12h/BH=05h"WINDOW"
  1782. ----------1512--BX1200-----------------------
  1783. INT 15 - TopView - SEND MESSAGE - "GETSCALE" - GET POINTER SCALE FACTOR
  1784.     AH = 12h
  1785.     BX = 1200h
  1786.     STACK: DWORD object handle for pointer
  1787. Return: STACK: DWORD pointer pos scaled as if window were this many colums wide
  1788.            DWORD pointer pos scaled as if window were this many rows high
  1789. SeeAlso: AH=12h/BX=1100h
  1790. ----------1512--BH13-------------------------
  1791. INT 15 - TopView - SEND MESSAGE - "REDRAW" - REDRAW WINDOW
  1792.     AH = 12h
  1793.     BH = 13h
  1794.     BL = window object
  1795.         00h DWORD on top of stack is handle for window to redraw
  1796.         01h redraw task's default window
  1797.         0Ch (DV 2.26+) redraw window of task owning handle on top of stack
  1798.         0Dh (DV 2.26+) redraw default window of parent of current task
  1799. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=0Eh
  1800. ----------1512--BX1300-----------------------
  1801. INT 15 - TopView - SEND MESSAGE - "SETICON" - SPECIFY POINTER ICON
  1802.     AH = 12h
  1803.     BX = 1300h
  1804.     STACK: DWORD object handle for pointer
  1805.            DWORD character to use for pointer
  1806. ----------1512--BH14-------------------------
  1807. INT 15 - TopView - SEND MESSAGE - "SETESC" - SET ESCAPE ROUTINE ADDRESS
  1808.     AH = 12h
  1809.     BH = 14h
  1810.     BL = message modifier
  1811.         00h handle is DWORD on top of stack
  1812.         01h define user stream
  1813.         04h intercept keystrokes from KEYBOARD to a window (handle on stack)
  1814.         05h intercept keystrokes from task's default KEYBOARD to a window
  1815.     STACK: (if window)   DWORD user stream number (14h-1Fh)
  1816.                  DWORD address of FAR user stream handler
  1817.            (if keyboard) DWORD address of FAR filter function
  1818.  
  1819. The keyboard filter function is called when the keyboard is in field mode.  On
  1820. entry,
  1821.     AL = character
  1822.     AH = 00h or extended ASCII code if AL = 00h
  1823.     BL = field number
  1824.     CH = cursor column
  1825.     CL = cursor row
  1826.     DL = field type modifier (sixth item in field table entry)
  1827.     DH = seventh item in field table entry
  1828.     ES:SI = window's handle
  1829.     DS:DI -> field table entry for field containing the cursor
  1830. The filter function should return
  1831.     AH = 00h use keystroke
  1832.          01h ignore keystroke
  1833.          FFh beep and ignore keystroke
  1834. Note: the filter function is not allowed to make INT 15, DOS, or BIOS calls
  1835. ----------1512--BH14-------------------------
  1836. INT 15 - TopView - SEND MESSAGE - "LOCK" - REQUEST EXCLUSIVE ACCESS TO RESOURCE
  1837.     AH = 12h
  1838.     BH = 14h
  1839.     BL = object
  1840.         00h mailbox handle is DWORD on top of stack
  1841.         02h use given task's mailbox (task's handle on top of stack)
  1842.         03h use current task's default mailbox
  1843. Note:    release exclusive access by sending CLOSE message to mailbox
  1844.     access may be requested multiple times, and requires multiple CLOSEs
  1845. SeeAlso: AH=12h/BH=0Dh
  1846. ----------1512--BH15-------------------------
  1847. INT 15 - DESQview v2.20+ - SEND MESSAGE - "SETFLAGS" - SET OBJECT FLAGS
  1848.     AH = 12h
  1849.     BH = 15h
  1850.     BL = object
  1851.         00h DWORD on top of stack
  1852.         mailbox, keyboard, or pointer only
  1853.         02h mailbox for task whose handle is on top of stack
  1854.         03h mailbox for current task
  1855.         04h keyboard for task whose handle is on top of stack
  1856.         05h keyboard for current task
  1857.     STACK: DWORD flags
  1858.         if mailbox:
  1859.             bit 0: all mail messages in common memory
  1860.             bit 1: allow write even if closed
  1861.             bit 2: don't erase messages when mailbox closed
  1862.         if keyboard:
  1863.             bit 5: exclusive input when keyboard in use for input
  1864. Return: nothing
  1865. Notes:    only available if the API level has been set to at least 2.20
  1866.     equivalent to performing SUBFROM and ADDTO calls on the object
  1867. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=16h
  1868. ----------1512--BH16-------------------------
  1869. INT 15 - DESQview v2.20+ - SEND MESSAGE - "GETFLAGS" - GET OBJECT FLAGS
  1870.     AH = 12h 
  1871.     BH = 16h
  1872.     BL = object
  1873.         00h DWORD on top of stack
  1874.         mailbox, keyboard, or pointer only
  1875.         02h mailbox for task whose handle is on top of stack
  1876.         03h mailbox for current task
  1877.         04h keyboard for task whose handle is on top of stack
  1878.         05h keyboard for current task
  1879. Return: STACK: DWORD current control flags
  1880. Note:    only available if the API level has been set to at least 2.20
  1881. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=15h
  1882. ----------15DE00-----------------------------
  1883. INT 15 - DESQview - GET PROGRAM NAME
  1884.     AX = DE00h
  1885. Return: AX = offset into DESQVIEW.DVO of program most recently selected from
  1886.         the "Switch Windows" menu (see below)
  1887. SeeAlso: AX=DE07h
  1888.  
  1889. Format of program entry in DESQVIEW.DVO:
  1890. Offset    Size    Description
  1891.  00h    BYTE    length of name (FFh if end of file)
  1892.  01h  N BYTEs    name
  1893.       2 BYTEs    keys to invoke program (second = 00h if only one key used)
  1894.     BYTE    program type
  1895.         00h normal program
  1896.         04h divider
  1897.         80h Delete a Program
  1898.         81h Change a Program
  1899.     WORD    ??? apparently always 0000h
  1900. ----------15DE01-----------------------------
  1901. INT 15 - DESQview - UPDATE "OPEN WINDOW" MENU
  1902.     AX = DE01h
  1903. Return: nothing
  1904. Note:    reads DESQVIEW.DVO, disables Open menu if file not in current directory
  1905. ----------15DE02-----------------------------
  1906. INT 15 - DESQview 1.x only - SET ??? FLAG FOR CURRENT WINDOW
  1907.     AX = DE02h
  1908. Return: nothing
  1909. Note:    this call is a NOP in DV 2.x
  1910. SeeAlso: AX=DE03h
  1911. ----------15DE03-----------------------------
  1912. INT 15 - DESQview 1.x only - GET ??? FOR CURRENT WINDOW
  1913.     AX = DE03h
  1914. Return: AX = ??? for current window
  1915.     BX = ??? for current window
  1916. Note:    this call is a NOP in DV 2.x
  1917. SeeAlso: AX=DE02h
  1918. ----------15DE04-----------------------------
  1919. INT 15 - DESQview - GET AVAILABLE COMMON MEMORY
  1920.     AX = DE04h
  1921. Return: BX = bytes of common memory available
  1922.     CX = largest block available
  1923.     DX = total common memory in bytes
  1924. SeeAlso: AX=DE05h,AX=DE06h
  1925. ----------15DE05-----------------------------
  1926. INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY
  1927.     AX = DE05h
  1928. Return: BX = K of memory available
  1929.     CX = largest block available
  1930.     DX = total conventional memory in K
  1931. SeeAlso: AX=DE04h,AX=DE06h
  1932. ----------15DE06-----------------------------
  1933. INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY
  1934.     AX = DE06h
  1935. Return: BX = K of expanded memory available
  1936.     CX = largest block available
  1937.     DX = total expanded memory in K
  1938. SeeAlso: AX=DE04h,AX=DE05h
  1939. ----------15DE07-----------------------------
  1940. INT 15 - DESQview - "APPNUM" - GET CURRENT PROGRAM'S NUMBER
  1941.     AX = DE07h
  1942. Return: AX = number of program as it appears on the "Switch Windows" menu
  1943. Note:    this API call may be made from a hardware interrupt handler
  1944. SeeAlso: AX=DE00h
  1945. ----------15DE08-----------------------------
  1946. INT 15 - DESQview - GET ???
  1947.     AX = DE08h
  1948. Return: AX = 0000h if ??? is not set to the current task
  1949.          0001h if ??? is set to the current task
  1950. ----------15DE09-----------------------------
  1951. INT 15 - DESQview - UNIMPLEMENTED
  1952.     AX = DE09h
  1953. Return: nothing (NOP in DV 1.x and 2.x)
  1954. ----------15DE0A-----------------------------
  1955. INT 15 - DESQview v2.00+ - "DBGPOKE" - DISPLAY CHARACTER ON STATUS LINE
  1956.     AX = DE0Ah
  1957.     BL = character
  1958. Return: character displayed, next call will display in next position (which
  1959.     wraps back to the start of the line if off the right edge of screen)
  1960. Notes:    displays character on bottom line of *physical* screen, regardless
  1961.       of current size of window (even entirely hidden)
  1962.     does not know about graphics display modes, just pokes the characters
  1963.       into display memory
  1964.     this API call may be made from a hardware interrupt handler
  1965. SeeAlso: AX=1003h
  1966. ----------15DE0B-----------------------------
  1967. INT 15 - DESQview v2.00+ - "APILEVEL" - DEFINE MINIMUM API LEVEL REQUIRED
  1968.     AX = DE0Bh
  1969.     BL = API level minor version number
  1970.     BH = API level major version number
  1971. Return: AX = maximum API level (AH = major, AL = minor)
  1972. Notes:    if the requested API level is greater than the version of DESQview, a
  1973.       "You need a newer version" error window is popped up
  1974.     the API level defaults to 1.00, and is inherited by child tasks
  1975. ----------15DE0C-----------------------------
  1976. INT 15 - DESQview v2.00+ - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  1977.     AX = DE0Ch
  1978.     BX = number of bytes
  1979. Return: ES:DI -> allocated block or 0000h:0000h (DV 2.26+)
  1980. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  1981.       system memory
  1982. SeeAlso: AX=1001h,AX=DE0Dh,AX=DE15h
  1983. ----------15DE0D-----------------------------
  1984. INT 15 - DESQview v2.00+ - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  1985.     AX = DE0Dh
  1986.     ES:DI -> previously allocated block
  1987. Return: nothing
  1988. SeeAlso: AX=1002h,AX=DE0Ch
  1989. ----------15DE0E-----------------------------
  1990. INT 15 - DESQview v2.00+ - "FINDMAIL" - FIND MAILBOX BY NAME
  1991.     AX = DE0Eh
  1992.     ES:DI -> name to find
  1993.     CX = length of name
  1994. Return: BX = 0000h not found
  1995.          0001h found
  1996.         DS:SI = object handle
  1997. SeeAlso: AH=12h/BH=11h
  1998. ----------15DE0F-----------------------------
  1999. INT 15 - DESQview v2.00+ - ENABLE DESQview EXTENSIONS
  2000.     AX = DE0Fh
  2001. Return: AX and BX destroyed (seems to be bug, weren't saved&restored)
  2002. Notes:    sends a manager stream with opcodes AEh, BDh, and BFh to task's window
  2003.     enables an additional mouse mode
  2004. ----------15DE10-----------------------------
  2005. INT 15 - DESQview v2.00+ - "PUSHKEY" - PUT KEY INTO KEYBOARD INPUT STREAM
  2006.     AX = DE10h
  2007.     BH = scan code
  2008.     BL = character
  2009. Return: nothing
  2010. Notes:    a later read will get the keystroke as if it had been typed by the user
  2011.     multiple pushes are read last-in first-out
  2012.     if a script exists for the pushed key in the current application, the
  2013.       script will be executed
  2014.     early copies of DV 2.00 destroy AX, BX, ES, and DI
  2015. SeeAlso: INT 16/AH=05h
  2016. ----------15DE11BL00-------------------------
  2017. INT 15 - DESQview 2.00+ - "JUSTIFY" - EN/DISABLE AUTOMATIC WINDOW JUSTIFICATION
  2018.     AX = DE11h
  2019.     BL = 00h      viewport will not move automatically
  2020.          nonzero  viewport will move to keep cursor visible (default)
  2021. Return: nothing
  2022. ----------15DE12BX0000-----------------------
  2023. INT 15 - DESQview v2.01+ - "CSTYLE" - SET "C"-COMPATIBLE CONTROL CHAR INTERPRET
  2024.     AX = DE12h
  2025.     BX = 0000h    select normal style (linefeed only moves down)
  2026.          nonzero  select C style (linefeed moves to start of next line)
  2027. Return: nothing
  2028. Note:    set on a per-task basis, and inherited from the parent task
  2029. ----------15DE13-----------------------------
  2030. INT 15 - DESQview v2.20+ - "GETCRIT" - GET CRITICAL NESTING COUNT
  2031.     AX = DE13h
  2032. Return: BX = number of calls to BEGINC or ENTERC (see INT 15/AX=101Bh,DE1Ch)
  2033.          without matching ENDC (see INT 15/AX=101Ch)
  2034. Note:    this API call may be made from within a hardware interrupt handler
  2035. SeeAlso: AX=101Bh,AX=101Ch,AX=DE1Bh,AX=DE1Ch
  2036. ----------15DE14-----------------------------
  2037. INT 15 - DESQview v2.20+ - GET OBJECT TYPE
  2038.     AX = DE14h
  2039.     ES:DI -> object
  2040. Return: BL = 00h not an object
  2041.          08h window or task
  2042.          09h mailbox
  2043.          0Ah keyboard
  2044.          0Bh timer
  2045.          0Ch objectq
  2046.          0Fh pointer
  2047.          10h panel
  2048. SeeAlso: AX=1016h
  2049. ----------15DE15BL00-------------------------
  2050. INT 15 - DESQview v2.20+ - SET ERROR HANDLING
  2051.     AX = DE15h
  2052.     BL = 00h post system error on all error conditions
  2053.          01h return carry flag set on calls to ADDTO, SUBFROM, and WRITE
  2054.          messages sent to mailboxes which fail due to lack of system
  2055.          or common memory
  2056.          02h (v2.26+) same as 01h, but return null pointer for GETMEM
  2057.          calls which fail due to lack of system memory
  2058. Return: nothing
  2059. SeeAlso: AX=DE16h
  2060. ----------15DE16-----------------------------
  2061. INT 15 - DESQview v2.20+ - GET ERROR HANDLING
  2062.     AX = DE16h
  2063. Return: BL = 00h always post system error
  2064.          01h return carry flag set on failed mailbox writes
  2065.          02h return CF set on failed mailbox writes and NULL on failed
  2066.          GETMEM calls
  2067. SeeAlso: AX=DE15h
  2068. ----------15DE17-----------------------------
  2069. INT 15 - DESQview v2.20-2.25 - reserved
  2070.     AX = DE17h
  2071. Return: pops up "Programming error" window
  2072. Note:    AX = 1117h is NOT identical to this call under DESQview 2.20 thru 2.25
  2073. SeeAlso: AX=1117h
  2074. ----------15DE17BX0000-----------------------
  2075. INT 15 - DESQview v2.26+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  2076.     AX = DE17h
  2077.     BX = 0000h    get current mapping context without setting
  2078.          nonzero    set new mapping context
  2079. Return: BX = mapping context in effect before call
  2080. Notes:    mapping contexts determine conventional-memory addressability; setting
  2081.       a mapping context ensures that the associated program and data areas
  2082.       are in memory for access.  Usable by drivers, TSRs and shared
  2083.       programs.
  2084.     caller need not be running under DESQview
  2085.     this API call may be made from a hardware interrupt handler
  2086. SeeAlso: AX=1117h,INT 2F/AX=1685h
  2087. ----------15DE18-----------------------------
  2088. INT 15 - DESQview v2.20+ - internal - ???
  2089.     AX = DE18h
  2090.     BP = function number
  2091.         high byte must be 10h
  2092.         low byte is function
  2093.         00h set ???
  2094.             BL = ???  (00h-10h, video mode???)
  2095.             BH = value to store
  2096.         03h set ???
  2097.             BL = ??? (stored in driver)
  2098.         0Ah get ???
  2099.             ES:DI -> 18-byte buffer to hold ???
  2100. Note:    calls video driver (NOP for Hercules driver,probably CGA and MCGA also)
  2101. ----------15DE19-----------------------------
  2102. INT 15 - DESQview v2.23+ - "GETCOMMON" - ALLOCATE "COMMON" MEMORY
  2103.     AX = DE19h
  2104.     BX = number of bytes to allocate
  2105. Return: AX = 0000h successful
  2106.         ES:DI -> allocated block
  2107.          nonzero insufficient memory
  2108. Note:    this API call may be made from within a hardware interrupt handler
  2109. SeeAlso: AX=DE0Ch,AX=DE15h,AX=DE1Ah
  2110. ----------15DE1A-----------------------------
  2111. INT 15 - DESQview v2.23+ - "PUTCOMMON" - DEALLOCATE "COMMON" MEMORY
  2112.     AX = DE1Ah
  2113.     DS:SI -> previously allocated block
  2114. Note:    this function may be called from within a hardware interrupt handler
  2115. SeeAlso: AX=DE0Dh,AX=DE19h
  2116. ----------15DE1B-----------------------------
  2117. INT 15 - DESQview v2.23+ internal - DECREMENT CRITICAL NESTING COUNT
  2118.     AX = DE1Bh
  2119. Return: nothing
  2120. SeeAlso: AX=101Ch,AX=DE13h,AX=DE1Ch
  2121. ----------15DE1C-----------------------------
  2122. INT 15 - DESQview v2.23+ - "ENTERC" - INCREMENT CRITICAL NESTING COUNT
  2123.     AX = DE1Ch
  2124. Return: nothing
  2125. Notes:    similar to AX=101Bh, but begins the critical region without ensuring
  2126.       that DOS is free
  2127.     the official documentation states that this call should be paired with
  2128.       "ENDC" (AX=101Ch); no mention is made of AX=DE1Bh
  2129.     this API call may be made from within a hardware interrupt handler
  2130. SeeAlso: AX=101Bh,AX=101Ch,AX=DE13h,AX=DE1Bh
  2131. ----------15DE1D-----------------------------
  2132. INT 15 - DESQview v2.23+ - "PUTKEY" - FAKE USER KEYSTROKES
  2133.     AX = DE1Dh
  2134.     DX = segment of handle for task to receive keystroke
  2135.     BL = character
  2136.     BH = scan code
  2137. Return: AX = 0000h if successful
  2138.        nonzero if receiver's keyboard buffer was full
  2139. Notes:    the key is treated as though the user had pressed it, ignoring any
  2140.       script which may be bound to the key, and using the current field
  2141.       table if the keyboard object is in field processing mode
  2142.     multiple PUTKEYs are seen in the order in which they are executed
  2143. SeeAlso: AX=DE10h
  2144. ----------15DE1E-----------------------------
  2145. INT 15 - DESQview v2.23+ - "SCRNINFO" - GET TRUE VIDEO PARAMETERS
  2146.     AX = DE1Eh
  2147. Return:    CL = actual number of rows on screen
  2148.     CH = actual number of columns on screen
  2149.     BL = actual video mode (may differ from INT 10/AH=0Fh return) (v2.26+)
  2150. Note:    this API call may be made from a hardware interrupt handler
  2151. SeeAlso: INT 10/AH=0Fh
  2152. ----------15DE1F-----------------------------
  2153. INT 15 - DESQview v2.23+ - "DOSUSER" - GET HANDLE OF TASK CURRENTLY USING DOS
  2154.     AX = DE1Fh
  2155. Return: BX = segment of task handle or 0000h if no tasks are using DOS
  2156. Note:    this API call may be made from within a hardware interrupt handler
  2157. SeeAlso: AX=DE13h
  2158. ----------15DE20-----------------------------
  2159. INT 15 - DESQview v2.26+ - "DISPATCHINT" - INTERRUPT ANOTHER TASK
  2160.     AX = DE20h
  2161.     BX = segment of handle of task to interupt
  2162.     DX:CX -> FAR interrupt routine
  2163. Return: nothing
  2164. Notes:    unlike "PGMINT" (AX=1021h), DISPATCHINT may be applied to the task
  2165.       making the DISPATCHINT call
  2166.     multiple "DISPATCHINT" calls are processed in the order in which they
  2167.       were executed
  2168.     the FAR routine is entered with the current ES, DS, SI, DI, and BP
  2169.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  2170.       needs to be preserved
  2171.     this API call may be made from within a hardware interrupt handler
  2172. SeeAlso: AX=1021h
  2173. ----------15DE21BX0000-----------------------
  2174. INT 15 - DESQview v2.26+ - "ASSERTVIR" - CONTROL 386 SCREEN VIRTUALIZATION
  2175.     AX = DE21h
  2176.     BX = 0000h turn off
  2177.          nonzero turn on
  2178. Return: BX = old state of virtualization
  2179. Note:    this API call may be made from within a hardware interrupt handler
  2180. ----------15DE22-----------------------------
  2181. INT 15 - DESQview v2.26+ - "PROCESSMEM" - GET TASK MEMORY STATUS
  2182.     AX = DE22h
  2183.     DX = segment of task handle
  2184. Return: DX = total amount of memory in paragraphs
  2185.     BX = amount of system memory in paragraphs
  2186.     CX = largest block of system memory available in paragraphs
  2187.     AX = flags
  2188.         bit 0: system memory resides in shared memory
  2189.         1: process's memory is swapped out
  2190.         2: process's system memory is swapped out
  2191. Notes:    if the task handle is a child task, the returned values will be for the
  2192.       process containing the task, rather than the task itself
  2193.     if the process's system memory is swapped out, BX,CX,DX remain
  2194.       unchanged, because the memory usage cannot be determined
  2195. SeeAlso: AX=DE04h,AX=DE05h,AX=DE06h
  2196. ----------15DE23-----------------------------
  2197. INT 15 - DESQview v2.31+ - ???
  2198.     AX = DE23h
  2199.     BX = ??? IRQ number on first PIC?
  2200.     CX = ??? IRQ number on second PIC?
  2201. Return: ???
  2202. ----------15DE24-----------------------------
  2203. INT 15 - DESQview v2.40 - ???
  2204.     AX = DE24h
  2205. Return: BX = ??? (0000h for v2.40)
  2206. ----------15DE25-----------------------------
  2207. INT 15 - DESQview v2.40 - ???
  2208.     AX = DE25h
  2209.     ???
  2210. Return: nothing
  2211. ----------15DE26-----------------------------
  2212. INT 15 - DESQview v2.40 - GET ???
  2213.     AX = DE26h
  2214. Return: BX = segment of handle for ??? (current window?)
  2215. ----------1605-------------------------------
  2216. INT 16 - KEYBOARD - STORE KEYSTROKE IN KEYBOARD BUFFER (AT/PS w enh keybd only)
  2217.     AH = 05h
  2218.     CH = scan code
  2219.     CL = ASCII character
  2220. Return: AL = 00h if successful
  2221.          01h if keyboard buffer full
  2222. Note:    under DESQview, the following "keystrokes" invoke the following
  2223.       actions when they are read from the keyboard buffer:
  2224.         38FBh or FB00h    switch to next window (only if main menu
  2225.                 popped up)
  2226.         38FCh or FC00h    pop up DESQview main menu
  2227.         38FEh or FE00h    close the current window
  2228.         38FFh or FF00h    pop up DESQview learn menu
  2229. SeeAlso: AH=00h,AH=71h,AH=FFh,INT 15/AX=DE10h
  2230. ----------212B--CX4445-----------------------
  2231. INT 21 - DESQview - INSTALLATION CHECK
  2232.     AH = 2Bh
  2233.     CX = 4445h ('DE')
  2234.     DX = 5351h ('SQ')
  2235.     AL = subfunction (DV v2.00+)
  2236.         01h get version
  2237.         Return: BX = version (BH = major, BL = minor)
  2238.         Note: early copies of v2.00 return 0002h
  2239.         02h get shadow buffer info, and start shadowing
  2240.         Return: BH = rows in shadow buffer
  2241.             BL = columns in shadow buffer
  2242.             DX = segment of shadow buffer
  2243.         04h get shadow buffer info
  2244.         Return: BH = rows in shadow buffer
  2245.             BL = columns in shadow buffer
  2246.             DX = segment of shadow buffer
  2247.         05h stop shadowing
  2248. Return: AL = FFh if DESQview not installed
  2249. Note:    in DESQview v1.x, there were no subfunctions; this call only identified
  2250.     whether or not DESQview was loaded
  2251. SeeAlso: INT 10/AH=FEh,INT 10/AH=FFh,INT 15/AX=1024h
  2252. ----------214402-----------------------------
  2253. INT 21 - QEMM-386 v5+ - IOCTL INPUT - GET API ENTRY POINT
  2254.     AX = 4402h
  2255.     BX = file handle for device "QEMM386$"
  2256.     CX = 0004h
  2257.     DS:DX -> DWORD buffer for API entry point
  2258. Return: CF clear if successful
  2259.         buffer filled (see INT 67/AH=3Fh for entry point parameters)
  2260.     CF set on error
  2261.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2262. SeeAlso: AX=4402h"HOOKROM",INT 2F/AX=D201h/BX=5145h,INT 67/AH=3Fh
  2263. ----------214402-----------------------------
  2264. INT 21 - Quarterdeck HOOKROM.SYS - IOCTL INPUT - GET HOOKED VECTOR TABLE
  2265.     AX = 4402h
  2266.     BX = file handle for device "HOOKROM$"
  2267.     CX = 0004h
  2268.     DS:DX -> DWORD buffer for address of hooked vector table (see below)
  2269. Return: CF clear if successful
  2270.         DS:DX buffer filled
  2271.     CF set on error
  2272.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2273. SeeAlso: AX=4402h"QEMM"
  2274.  
  2275. Format of hooked vector table entry:
  2276. Offset    Size    Description
  2277.  00h  5 BYTEs    FAR jump to actual interrupt handler
  2278.          (end of table if first byte is not EAh)
  2279.  05h    BYTE    interrupt vector number
  2280. ----------29---------------------------------
  2281. INT 29 - DOS 2+ - FAST CONSOLE OUTPUT
  2282.     AL = character to display
  2283. Return: nothing
  2284. Notes:    automatically called when writing to a device with bit 4 of its device
  2285.       driver header set (see also INT 21/AH=52h)
  2286.     COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20
  2287.       vector and assume that ANSI.SYS is installed if the segment is larger
  2288.     the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
  2289.     the default handler under DESQview 2.2 understands the <Esc>[2J
  2290.       screen-clearing sequence, calls INT 10/AH=0Eh for all others
  2291. SeeAlso: INT 79
  2292. ----------2A2001-----------------------------
  2293. INT 2A - MS Networks or NETBIOS - ???
  2294.     AX = 2001h
  2295.     ???
  2296. Return: ???
  2297. Note:    intercepted by DESQview 2.x
  2298. ----------2F4300-----------------------------
  2299. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) - INSTALLATION CHECK
  2300.     AX = 4300h
  2301. Return: AL = 80h XMS driver installed
  2302.     AL <> 80h no driver
  2303. Notes:    XMS gives access to extended memory and noncontiguous/nonEMS memory
  2304.       above 640K
  2305.     this installation check DOES NOT follow the format used by other
  2306.       software
  2307. SeeAlso: AX=4310h
  2308. ----------2F4310-----------------------------
  2309. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) - GET DRIVER ADDRESS
  2310.     AX = 4310h
  2311. Return: ES:BX -> driver entry point
  2312. Note:    HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h
  2313. SeeAlso: AX=4300h
  2314.  
  2315. Perform a FAR call to the driver entry point with AH set to the function code
  2316.     AH    function
  2317.     00h  Get XMS version number
  2318.          Return: AX = XMS version (in BCD)
  2319.              BX = internal revision number
  2320.              DX = 0001h if HMA (1M to 1M + 64K) exists
  2321.               0000h if HMA does not exist
  2322.     01h  Request High Memory Area (1M to 1M + 64K)
  2323.          DX = memory in bytes (for TSR or device drivers)
  2324.           FFFFh if application program
  2325.          Return: AX = 0001h success
  2326.             = 0000h failure
  2327.                BL = error code (see below)
  2328.     02h  Release High Memory Area
  2329.          Return: AX = 0001h success
  2330.             = 0000h failure
  2331.                BL = error code (see below)
  2332.     03h  Global enable A20, for using the HMA
  2333.          Return: AX = 0001h success
  2334.             = 0000h failure
  2335.                BL = error code (see below)
  2336.     04h  Global disable A20
  2337.          Return: AX = 0001h success
  2338.             = 0000h failure
  2339.                BL = error code (see below)
  2340.     05h  Local enable A20, for direct access to extended memory
  2341.          Return: AX = 0001h success
  2342.             = 0000h failure
  2343.                BL = error code (see below)
  2344.     06h  Local disable A20
  2345.          Return: AX = 0001h success
  2346.             = 0000h failure
  2347.                BL = error code (see below)
  2348.     07h  Query A20 state
  2349.          Return: AX = 0001h enabled
  2350.             = 0000h disabled
  2351.              BL = error code (0 = successful)
  2352.     08h  Query free extended memory, not counting HMA
  2353.          BL = 00h (some implementations leave BL unchanged on success)
  2354.          Return: AX = size of largest extended memory block in K
  2355.              DX = total extended memory in K
  2356.              BL = error code (see below)
  2357.     09h  Allocate extended memory block
  2358.          DX = Kbytes needed
  2359.          Return: AX = 0001h success
  2360.                DX = handle for memory block
  2361.             = 0000h failure
  2362.                BL = error code (see below)
  2363.     0Ah  Free extended memory block
  2364.          DX = handle of block to free
  2365.          Return: AX = 0001h success
  2366.             = 0000h failure
  2367.                BL = error code (see below)
  2368.     0Bh  Move extended memory block
  2369.          DS:SI -> EMM structure (see below)
  2370.          Note: if either handle is 0000h, the corresponding offset is
  2371.            considered to be an absolute segment:offset address in
  2372.            directly addressable memory
  2373.          Return: AX = 0001h success
  2374.             = 0000h failure
  2375.                BL = error code (see below)
  2376.     0Ch  Lock extended memory block
  2377.          DX = handle of block to lock
  2378.          Return: AX = 0001h success
  2379.                DX:BX = 32-bit linear address of locked block
  2380.             = 0000h failure
  2381.                BL = error code (see below)
  2382.     0Dh  Unlock extended memory block
  2383.          DX = handle of block to unlock
  2384.          Return: AX = 0001h success
  2385.             = 0000h failure
  2386.                BL = error code (see below)
  2387.     0Eh  Get handle information
  2388.          DX = handle for which to get info
  2389.          Return: AX = 0001h success
  2390.                BH = block's lock count
  2391.                BL = number of free handles left
  2392.                DX = block size in K
  2393.             = 0000h failure
  2394.                BL = error code (see below)
  2395.     0Fh  Reallocate extended memory block
  2396.          DX = handle of block
  2397.          BX = new size of block in K
  2398.          Return: AX = 0001h success
  2399.             = 0000h failure
  2400.                BL = error code (see below)
  2401.     10h  Request upper memory block (nonEMS memory above 640K)
  2402.          DX = size of block in paragraphs
  2403.          Return: AX = 0001h success
  2404.                BX = segment address of UMB
  2405.                DX = actual size of block
  2406.             = 0000h failure
  2407.                BL = error code (see below)
  2408.                DX = largest available block
  2409.     11h  Release upper memory block
  2410.          DX = segment address of UMB to release
  2411.          Return: AX = 0001h success
  2412.             = 0000h failure
  2413.                BL = error code (see below)
  2414.     12h  Reallocate upper memory block (XMS v3.0)
  2415.          DX = segment address of UMB to resize
  2416.          BX = new size of block in paragraphs
  2417.          Return: AX = 0001h success
  2418.             = 0000h failure
  2419.                BL = error code (see below)
  2420.     34h  (QEMM 5.11 only, undocumented) ???
  2421.     44h  (QEMM 5.11 only, undocumented) ???
  2422.     88h  (QEMM 6.0, undocumented) query free extended memory
  2423.          Return: EAX = largest block of extended memory, in K
  2424.                   ECX = ??? (00FFFFFFh)
  2425.              EDX = total Kbytes of extended memory
  2426.              BL = status
  2427.                  00h success
  2428.              A0h failure
  2429.     89h  (QEMM 6.0, undocumented) allocate extended memory
  2430.          EDX = Kbytes needed
  2431.          Return: AX = 0001h success
  2432.                      EDX = handle for allocated block (free with AH=0Ah)
  2433.             = 0000h failure
  2434.                 BL = status (80h,A0h,A1h,A2h)
  2435.     8Eh  (QEMM 6.0, undocumented) get handle information
  2436.          DX = handle
  2437.          Return: AX = 0001h success
  2438.                      BH = block's lock count???
  2439.                 CX = number of free handles left
  2440.                 EDX = block size in K
  2441.                  = 0000h failure
  2442.                      BL = status (A2h)
  2443.     8Fh  (QEMM 6.0, undocumented) reallocate extended memory block
  2444.          DX = handle
  2445.          EBX = new size in K
  2446.          Return: AX = 0001h success
  2447.                  = 0000h failure
  2448.                 BL = status (A2h,ABh) (see below)
  2449.  
  2450. Note:    HIMEM.SYS requires at least 256 bytes free stack space
  2451.  
  2452. Format of EMM structure:
  2453. Offset    Size    Description
  2454.  00h    DWORD    number of bytes to move (must be even)
  2455.  04h    WORD    source handle
  2456.  06h    DWORD    offset into source block
  2457.  0Ah    WORD    destination handle
  2458.  0Ch    DWORD    offset into destination block
  2459.  
  2460. Error codes returned in BL:
  2461.     00h successful
  2462.     80h function not implemented
  2463.     81h Vdisk was detected
  2464.     82h an A20 error occurred
  2465.     8Eh a general driver error
  2466.     8Fh unrecoverable driver error
  2467.     90h HMA does not exist
  2468.     91h HMA is already in use
  2469.     92h DX is less than the /HMAMIN= parameter
  2470.     93h HMA is not allocated
  2471.     94h A20 line still enabled
  2472.     A0h all extended memory is allocated
  2473.     A1h all available extended memory handles are allocated
  2474.     A2h invalid handle
  2475.     A3h source handle is invalid
  2476.     A4h source offset is invalid
  2477.     A5h destination handle is invalid
  2478.     A6h destination offset is invalid
  2479.     A7h length is invalid
  2480.     A8h move has an invalid overlap
  2481.     A9h parity error occurred
  2482.     AAh block is not locked
  2483.     ABh block is locked
  2484.     ACh block lock count overflowed
  2485.     ADh lock failed
  2486.     B0h only a smaller UMB is available
  2487.     B1h no UMB's are available
  2488.     B2h UMB segment number is invalid
  2489. ----------2FD200BX5144-----------------------
  2490. INT 2F - Quarterdeck - QEMM/QRAM/VIDRAM/MANIFEST v5.0+ - INSTALLATION CHECK
  2491.     AX = D200h
  2492.     BX = 5144h ("QD")
  2493.     CX = 4D45h ("ME")
  2494.     DX = 4D30h ("M0")
  2495. Return: AL = FFh installed      
  2496.     if BX,CX,DX registers were as specified on entry:
  2497.         BX = 4D45h ("ME")
  2498.         CX = 4D44h ("MD")
  2499.         DX = 5652h ("VR")
  2500. Notes:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  2501.       through FFh, then C0h through D1h
  2502.     QEMM and QRAM both responded the same
  2503.     for AL <> 0, if the BX/CX/DX values don't match a the identifier of a
  2504.       Quarterdeck product, it just chains to the previous INT 2F handler
  2505. ----------2FD201BX4849-----------------------
  2506. INT 2F - Multiplex - Quarterdeck - GET QD HIMEM PRESENCE
  2507.     AX = D201h
  2508.     BX = 4849h ("HI")
  2509.     CX = 4D45h ("ME")
  2510.     DX = 4D51h ("MQ")
  2511. Return: BX = 4F4Bh ("OK")
  2512.     ES:DI -> HIMEM entry point
  2513. Notes:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  2514.       through FFh, then C0h through D1h
  2515. SeeAlso: AX=D201h/BX=5145h
  2516. ----------2FD201BX4849-----------------------
  2517. INT 2F - Quarterdeck - QEMM/QRAM v5.0+ - GET HIRAM MEMORY CHAIN
  2518.     AX = D201h
  2519.     BX = 4849h ("HI")
  2520.     CX = 5241h ("RA")
  2521.     DX = 4D30h ("M0")
  2522. Return: BX = 4F4Bh ("OK")
  2523.     CX = segment of start of HIRAM chain
  2524.     DX = QEMM/QRAM code segment
  2525. Notes:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  2526.       through FFh, then C0h through D1h
  2527.     QEMM and QRAM both responded the same
  2528.     the HIRAM memory chain has the same format as the regular DOS 4.0
  2529.       memory chain (see INT 21/AH=52h), except that XMS Upper Memory Blocks
  2530.       have the block header program name field set to "UMB"; blocks whose
  2531.       "owner" field is set to the QEMM/QRAM code segment returned in DX
  2532.       are locked out regions such as video memory and ROMs.
  2533. ----------2FD201BX4D41-----------------------
  2534. INT 2F - Quarterdeck - MANIFEST v1.0+ - INSTALLATION CHECK
  2535.     AX = D201h
  2536.     BX = 4D41h ("MA")
  2537.     CX = 4E49h ("NI")
  2538.     DX = 4645h ("FE")
  2539. Return: BX = 5354h ("ST")
  2540. Note:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  2541.       through FFh, then C0h through D1h
  2542. ----------2FD201BX5145-----------------------
  2543. INT 2F - Quarterdeck - QEMM v5.0+ - INSTALLATION CHECK
  2544.     AX = D201h
  2545.     BX = 5145h ("QE")
  2546.     CX = 4D4Dh ("MM")
  2547.     DX = 3432h ("42")
  2548. Return: BX = 4F4Bh ("OK")
  2549.     ES:DI -> QEMM API entry point (see INT 67/AH=3Fh)
  2550. Note:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  2551.       through FFh, then C0h through D1h
  2552. SeeAlso: AX=D201h/BX=4849h,INT 67/AH=3Fh
  2553. ----------2FD201BX5649-----------------------
  2554. INT 2F - Quarterdeck - VIDRAM v5.0+ - INSTALLATION CHECK
  2555.     AX = D201h
  2556.     BX = 5649h ("VI")
  2557.     CX = 4452h ("DR")
  2558.     DX = 414dh ("AM")
  2559. Return: BX = 4F4Bh ("OK")
  2560.     ES:DI -> VIDRAM entry point
  2561. Note:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  2562.       through FFh, then C0h through D1h
  2563.  
  2564. Call VIDRAM entry point with:
  2565.     AH = 00h get status
  2566.         Return: AL = VIDRAM state (see below)
  2567.             BL = bit 0: ???
  2568.                  bits 1-7 not used
  2569.             BH = ???
  2570.             CL = current monitor (01h = mono, 80h = color)
  2571.             SI = current top of memory (paragraph)???
  2572.             DI = segment of ???
  2573.     AH = 01h setup
  2574.         AL = VIDRAM state (00h off, 01h no EGA graphics, 02h no graph)
  2575.         BL = bit 0: ???
  2576.              bits 1-7 not used
  2577.         BH = ???
  2578.         CL = monitor (01h = monochrome, 80h = color)
  2579.         SI = new top of memory (paragraph)???
  2580.     AH = 02h get ???
  2581.         Return: ES:DI -> ??? data
  2582. Return: CF set on error
  2583.     CF clear if successful
  2584. ----------2FDE00BX4445-----------------------
  2585. INT 2F - DESQview v2.26+ External Device Interface - INSTALLATION CHECK
  2586.     AX = DE00h
  2587.     BX = 4445h ("DE")
  2588.     CX = 5844h ("XD")
  2589.     DX = 4931h ("I1")
  2590. Return: AL = FFh if installed (even if other registers do not match)
  2591.     if BX,CX, and DX were as specified on entry,
  2592.         BX = 4845h ("HE")
  2593.         CX = 5245h ("RE")
  2594.         DX = 4456h ("DV")
  2595. Notes:    AH=DEh is the default XDI multiplex number, but may range from C0h-FFh
  2596.     programs should check for XDI starting at DEh to FFh, then C0h to DDh
  2597.     the XDI handler should not issue any DOS or BIOS calls, nor should it
  2598.       issue DESQview API calls other than those allowed from hardware ints
  2599. ----------2FDE01-----------------------------
  2600. INT 2F - DESQview v2.26+ External Device Interface - DRIVER CUSTOM SUBFUNCTION
  2601.     AX = DE01h
  2602.     BX = driver ID
  2603.     other registers as needed by driver
  2604. Notes:    XDI drivers should pass this call through to previous handler if ID
  2605.       does not match
  2606.     DESQview never calls this function
  2607. ----------2FDE01BX5242-----------------------
  2608. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, Ralf Brown's XDI drivers
  2609.     AX = DE01h
  2610.     BX = 5242h ("RB")
  2611.     CX:DX = program identifier
  2612.         656F7000h ("eop",0) for DVeop
  2613. Return: AX = 5242h ("RB") if installed
  2614.         ES:BX -> data or entry point
  2615.         CX = version number (CH = major, CL = minor)
  2616.  
  2617. Call DVeop entry point with:
  2618.     ES:DI -> callback address or 0000h:0000h to remove callback
  2619. Return: AX = status
  2620.         0000h failed (callback table full or attempted to remove non-
  2621.             existent callback)
  2622.         0001h successful
  2623.         ES:DI -> chaining address
  2624.     BX,CX,DX destroyed
  2625. Notes:    the callback function is called with a simulated interrupt when the
  2626.       DESQview window containing it is closed; it should perform all
  2627.       necessary cleanup and then perform a FAR jump to the chaining address
  2628.       or an IRET if the chaining address is 0000h:0000h
  2629.     if the program wishes to remove itself before the window is closed, it
  2630.       should call the DVeop entry point with the previously returned
  2631.       chaining address and ignore the returned chaining address.
  2632. ----------2FDE01BX7474-----------------------
  2633. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVTXDI.COM
  2634.     AX = DE01h
  2635.     BX = 7474h
  2636.     CL = function
  2637.         00h installation check
  2638.         Return: AL = FFh
  2639.         01h get process handle
  2640.         DX = keys on Open Window menu (DL = first, DH = second)
  2641.         Return: AX = process handle or 0000h if not running
  2642.         02h (v1.3+) set TMAN handle
  2643.         DX = TMAN process handle
  2644.         03h (v1.3+) set open keys to ignore on next CL=01h call
  2645.         DX = keys on Open Window menu (DL = first, DH = second)
  2646. Return: BX = 4F4Bh ("OK")
  2647.     DL destroyed
  2648. Note:    DVTXDI is distributed as part of the shareware products DVTree (DOS
  2649.      shell/DESQview process manager) and DVTMAN by Mike Weaver
  2650. ----------2FDE01BX7575-----------------------
  2651. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVSIXDI.COM
  2652.     AX = DE01h
  2653.     BX = 7575h
  2654.     CX = function
  2655.         0000h installation check
  2656.         Return: AX = 00FFh if installed
  2657.         0001h turn on notification (currently unused)
  2658.         Return: AX = 0001h
  2659.         0002h turn off notification (currently unused)
  2660.         Return: AX = 0001h
  2661.         0003h get process information
  2662.         Return: AX = status
  2663.                 0000h failed
  2664.                 0001h successful
  2665.                 BX = last instantaneous time slice
  2666.                     in 1/100s (v1.10)
  2667.                     in 1/18s (v1.11+)
  2668.                 CX = number of processes
  2669.                 DX = number of "(starting)" records (v2.00+)
  2670.                 SI = number of records in process info array
  2671.                      (v2.00+) (always 15 for v1.x)
  2672.                 ES:DI -> process info array (see below)
  2673.         0004h get version
  2674.         Return: AH = major version
  2675.             AL = minor version
  2676.         0005h (v1.10+) get time since DESQview started
  2677.         Return: DX:AX = 1/100s since DV start (v1.10)
  2678.             DX:AX = 1/18s since DV start (v1.11+)
  2679.         0006h (v1.10+) get number of task switches
  2680.         Return: DX:AX = total task switches
  2681.             CX = task switches in last instantaneous interval
  2682. Notes:    DVSIXDI is part of the DVSI (DESQview System Information) package by
  2683.       Daniel J. Bodoh
  2684.     for v1.00, function 0003h allocates common memory, which the caller
  2685.       must deallocate after reading the process information; only the
  2686.       currently used records are placed in the buffer
  2687.     for v1.10, function 0003h merely returns a pointer to the internal
  2688.       array of process information; the caller should make a copy of the
  2689.       array while inside a critical section (see INT 15/AX=101Bh).    Only
  2690.       those records with bit 7 of the first byte set are valid.
  2691.  
  2692. Format of information for one process (v1.00):
  2693. Offset    Size    Description
  2694.  00h    BYTE    flags
  2695.         bit 7: process slot is valid
  2696.  01h    WORD    offset into DESQVIEW.DVO of program's record if started from
  2697.          Open Windows menu, else undefined
  2698.  03h    WORD    Switch Windows window number
  2699.  05h    WORD    segment of process handle
  2700.  07h    WORD    number of tasks owned by process
  2701.  09h    WORD    mapping context of process
  2702.  0Bh    DWORD    hook for other programs
  2703.  
  2704. Format of information for one process (v1.10-v2.00):
  2705. Offset    Size    Description
  2706.  00h    BYTE    flags
  2707.         bit 7: valid record
  2708.             6: (v2.00+) record is allocated; if bit 7 clear, process
  2709.                 is "(starting)" and only offsets 01h and 09h are valid
  2710.             5: (v2.00+) this app currently owns the CPU
  2711.             4: reserved (0)
  2712.             3: DESQview system task
  2713.             2: reserved (0)
  2714.             1: task has keyboard (currently unused)
  2715.             0: task swapped out (currently unused)
  2716.  01h    WORD    Open Window keys
  2717.  03h    WORD    Switch Windows number
  2718.  05h    WORD    segment of process handle
  2719.  07h    WORD    number of tasks for process
  2720.  09h    WORD    process mapping context
  2721.  0Bh    DWORD    time process started (relative to start of DESQview)
  2722.  0Fh    DWORD    time process last got CPU (relative to start of DESQview)
  2723.  13h    DWORD    time process last gave up CPU (relative to start of DESQview)
  2724.  17h    DWORD    total CPU time since process started
  2725.  1Bh    DWORD    CPU time at start of current instantaneous interval
  2726.  1Fh    DWORD    CPU time in current instantaneous interval
  2727.  23h    DWORD    hook for other programs
  2728. Note:    all times are in 1/100s for v1.10, in 1/18s for v1.11+
  2729. ----------2FDE01BXFFFE-----------------------
  2730. INT 2F - DESQview v2.26+ XDI - DVXMS.DVR - ???
  2731.     AX = DE01h
  2732.     BX = FFFEh
  2733.     CX = 4D47h ("MG")
  2734.     DX = 0052h (0,"R")
  2735. Return: AL = FFh
  2736.     DX = 584Dh
  2737. ----------2FDE02-----------------------------
  2738. INT 2F - DESQview v2.26+ External Device Interface - DV INITIALIZATION COMPLETE
  2739.     AX = DE02h
  2740.     BX = mapping context of DESQview
  2741.     DX = handle of DESQview system task
  2742. SeeAlso: AX=DE03h
  2743. Note:    driver should pass this call to previous handler after doing its work
  2744. ----------2FDE03-----------------------------
  2745. INT 2F - DESQview v2.26+ External Device Interface - DV TERMINATION
  2746.     AX = DE03h
  2747.     BX = mapping context of DESQview
  2748.     DX = handle of DESQview system task
  2749. SeeAlso: AX=DE02h
  2750. Notes:    driver should pass this call to previous handler before doing its work
  2751.     DESQview makes this call when it is exiting, but before unhooking any
  2752.       interrupt vectors
  2753. ----------2FDE04-----------------------------
  2754. INT 2F - DESQview v2.26+ External Device Interface - ADD PROCESS
  2755.     AX = DE04h
  2756.     BX = mapping context of new process
  2757.     DX = handle of process
  2758. Return: nothing
  2759. Notes:    XMS XDI handler (installed by default) allocates a 22-byte record
  2760.       (see below) from "common" memory to control access to XMS memory
  2761.     all DOS, BIOS, and DV API calls are valid in handler
  2762.     driver should pass this call to previous handler after processing it
  2763. SeeAlso: AX=DE05h
  2764.  
  2765. Format of XMS XDI structure:
  2766. Offset    Size    Description
  2767.  00h    DWORD    pointer to 10-byte record???
  2768.  04h    DWORD    pointer to next XMS XDI structure
  2769.  08h    WORD    mapping context
  2770.  0Ah    BYTE    ???
  2771.  0Bh  5 BYTEs    XMS entry point to return for INT 2F/AX=4310h
  2772.         (FAR jump to next field)
  2773.  10h  6 BYTEs    FAR handler for XMS driver entry point
  2774.         (consists of a FAR CALL followed by RETF)
  2775. ----------2FDE05-----------------------------
  2776. INT 2F - DESQview v2.26+ External Device Interface - REMOVE PROCESS
  2777.     AX = DE05h
  2778.     BX = mapping context of process
  2779.     DX = handle of last task in process
  2780. Return: nothing
  2781. Notes:    XMS XDI handler releases the structure allocated by AX=DE04h
  2782.     driver should pass this call to previous handler before processing it
  2783.     all DOS, BIOS, and DV API calls except those generating a task switch
  2784.       are valid in handler
  2785. SeeAlso: AX=DE04h
  2786. ----------2FDE06-----------------------------
  2787. INT 2F - DESQview v2.26+ External Device Interface - CREATE TASK
  2788.     AX = DE06h
  2789.     BX = mapping context of process containing task
  2790.     DX = handle of new task
  2791. Notes:    driver should pass this call to previous handler after processing it
  2792.     all DOS, BIOS, and DV API calls are valid in handler
  2793. ----------2FDE07-----------------------------
  2794. INT 2F - DESQview v2.26+ External Device Interface - TERMINATE TASK
  2795.     AX = DE07h
  2796.     BX = mapping context of process containing task
  2797.     DX = handle of task
  2798. Notes:    driver should pass this call to previous handler before processing it
  2799.     all DOS, BIOS, and DV API calls except those generating a task switch
  2800.       are valid in handler
  2801. ----------2FDE08-----------------------------
  2802. INT 2F - DESQview v2.26+ External Device Interface - SAVE STATE
  2803.     AX = DE08h
  2804.     BX = mapping context of task being switched from
  2805.     DX = handle of task being switched from
  2806. Notes:    invoked prior to task swap, interrupts, etc
  2807.     driver should pass this call to previous handler after processing it
  2808. ----------2FDE09-----------------------------
  2809. INT 2F - DESQview v2.26+ External Device Interface - RESTORE STATE
  2810.     AX = DE09h
  2811.     BX = mapping context of task being switched to
  2812.     DX = handle of task being switched to
  2813. Notes:    state is restored except for interrupts
  2814.     driver should pass this call to previous handler before processing it
  2815. ----------2FDE0A-----------------------------
  2816. INT 2F - DESQview v2.26+ External Device Interface - CHANGE KEYBOARD FOCUS
  2817.     AX = DE0Ah
  2818.     BX = mapping context of task receiving focus
  2819.     DX = handle of running task
  2820. Notes:    driver should pass this call to previous handler before processing it
  2821.     this call often occurs inside a keyboard interrupt
  2822. ----------2FDE0B-----------------------------
  2823. INT 2F - DESQview v2.26+ External Device Interface - DVP PROCESSING COMPLETE
  2824.     AX = DE0Bh
  2825.     BX = mapping context of DESQview system task
  2826.     CX = number of system memory paragraphs required for the use of all
  2827.         XDI drivers (DV will add this to system memory in DVP buffer)
  2828.     DX = handle of DESQview system task
  2829.     SI = mapping context of new process if it starts
  2830.     ES:DI -> DVP buffer
  2831. Return: CX incremented as needed
  2832. Notes:    once DV invokes this function, the DVP buffer contents may be changed
  2833.     driver should pass this call to previous handler before processing it
  2834. ----------2FDE0C-----------------------------
  2835. INT 2F - DESQview v2.26+ External Device Interface - SWAP OUT PROCESS
  2836.     AX = DE0Ch
  2837.     BX = mapping context of task being swapped out
  2838.     DX = handle of DESQview system task
  2839. Note:    driver should pass this call to previous handler after processing it
  2840. ----------2FDE0D-----------------------------
  2841. INT 2F - DESQview v2.26+ External Device Interface - SWAP IN PROCESS
  2842.     AX = DE0Dh
  2843.     BX = mapping context of process just swapped in
  2844.     DX = handle of DESQview system task
  2845. Note:    driver should pass this call to previous handler before processing it
  2846. ----------2FDE0E-----------------------------
  2847. INT 2F - DESQview v2.26+ External Device Interface - DVP START FAILED
  2848.     AX = DE0Eh
  2849.     BX = mapping context of DESQview system task
  2850.     DX = handle of DESQview system task
  2851.     SI = mapping context of failed process (same as for call to AX=DE0Bh)
  2852. Note:    driver should pass this call to previous handler after processing it
  2853. ----------4B8102DX0000-----------------------
  2854. INT 4B - Virtual DMA Specification (VDS) - GET VERSION
  2855.     AX = 8102h
  2856.     DX = 0000h
  2857. Return: CF clear if successful
  2858.         AH = major version number
  2859.         AL = minor version number
  2860.         BX = product number
  2861.             0000h for Quadtel's QMAPS and Hewlett-Packard's HPMM.SYS
  2862.             0001h for Microsoft's EMM386.EXE
  2863.         4560h ("E`") for Qualitas' 386MAX
  2864.             4D43h ("MC") for V Communication's Memory Commander
  2865.         5145h ("QE") for Quarterdeck's QEMM-386
  2866.         CX = product revision number
  2867.             always 0000h for QMAPS and HPMM.SYS
  2868.             always 0001h for Microsoft's EMM386.EXE v4.20-4.41
  2869.         SI:DI = maximum DMA buffer size
  2870.         DX = flags
  2871.         bit 0: PC/XT bus (DMA in first megabyte only)
  2872.             1: physical buffer/remap region in first megabyte
  2873.             2: automatic remap enabled
  2874.             3: all memory is physically contiguous
  2875.          4-15: reserved (zero)
  2876.     CF set on error
  2877.         AL = error code (see below)
  2878. Note:    bit 5 of 0040h:007Bh is supposed to be set if VDS is supported; this is
  2879.       apparently not always the case
  2880. SeeAlso: INT 31
  2881. ----------4B810D-----------------------------
  2882. INT 4B - QEMM-386 - BUG
  2883.     AX = 810Dh
  2884. Note:    the code in QEMM v5.11 and 6.00 jumps to an invalid location on this
  2885.       call
  2886. ----------50---------------------------------
  2887. INT 50 - through 57 - IRQ0-IRQ7 relocated by DESQview
  2888. Notes:    this is the default location for older versions; DESQview v2.26+
  2889.       searches for unused ranges of interrupts and uses the lowest
  2890.       available range in its list for relocating these IRQs and the next
  2891.       lowest for relocating IRQ8-IRQ15
  2892.     a range of eight interrupts starting at a multiple of 8 is considered
  2893.       available if all vectors are identical and it has not been excluded
  2894.       with an /XB:nn commandline switch
  2895.     the list of ranges for v2.26 is 50h,58h,68h,78h,F8h (if < two of these
  2896.       are available, F8h and then 50h are used anyway)
  2897.     the list of ranges for v2.31+ is 68h,78h,88h-B8h,F8h (if < two of these
  2898.       are available, F8h and then F0h are used anyway)
  2899. SeeAlso: INT 58"DESQview"
  2900. ----------58---------------------------------
  2901. INT 58 - IRQ8 relocated by DESQview 2.26+
  2902. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  2903. SeeAlso: INT 50"DESQview",INT 70
  2904. ----------59---------------------------------
  2905. INT 59 - IRQ9 relocated by DESQview 2.26+
  2906. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  2907. SeeAlso: INT 50"DESQview",INT 71
  2908. ----------5A---------------------------------
  2909. INT 5A - IRQ10 relocated by DESQview 2.26+
  2910. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  2911. SeeAlso: INT 50"DESQview",INT 72
  2912. ----------5B---------------------------------
  2913. INT 5B - IRQ11 relocated by DESQview 2.26+
  2914. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  2915. SeeAlso: INT50"DESQview",INT 73
  2916. ----------5C---------------------------------
  2917. INT 5C - IRQ12 relocated by DESQview 2.26+
  2918. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  2919. SeeAlso: INT 50"DESQview",INT 74
  2920. ----------5D---------------------------------
  2921. INT 5D - IRQ13 relocated by DESQview 2.26+
  2922. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  2923. SeeAlso: INT 50"DESQview",INT 75
  2924. ----------5E---------------------------------
  2925. INT 5E - IRQ14 relocated by DESQview 2.26+
  2926. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  2927. SeeAlso: INT 50"DESQview",INT 76
  2928. ----------5F---------------------------------
  2929. INT 5F - IRQ15 relocated by DESQview 2.26+
  2930. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  2931. SeeAlso: INT 50"DESQview",INT 77
  2932. ----------673F--CX5145-----------------------
  2933. INT 67 - QEMM-386 v4.23+ - INSTALLATION CHECK
  2934.     AH = 3Fh
  2935.     CX = 5145h ("QE")
  2936.     DX = 4D4Dh ("MM")
  2937. Return: AH = 00h if installed
  2938.         ES:DI -> QEMM API entry point
  2939. Notes:    if no other program has hooked INT 67, an alternate installation
  2940.       check is to test for the string
  2941.       "QUARTERDECK EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
  2942.       handler's segment; the word at offset 12h contains the offset in
  2943.       the handler's segment of the API entry point
  2944.     MICEMM (Micronics Expanded Memory Manager) versions 2.0C and 4D support
  2945.       the alternate QEMM installation check and entry point functions 00h,
  2946.       02h, and 03h; version 4D only provides the signature string if the
  2947.       commandline argument "DV" is provided
  2948. SeeAlso: AH=DDh,AX=5BF0h,AX=FFA5h,INT 15/AX=11DEh,INT 21/AX=4402h"QEMM"
  2949. SeeAlso: INT 2F/AX=D201h/BX=5145h
  2950.  
  2951. Call QEMM entry point with:
  2952.     AH = 00h get QEMM state
  2953.         Return: CF clear
  2954.             AL = QEMM state
  2955.                 bit 0 set if QEMM turned OFF
  2956.                 bit 1 set if in "Auto" mode
  2957.     AH = 01h set QEMM state
  2958.         AL = new state
  2959.             bit 0 set: place QEMM in OFF state
  2960.         Return: CF clear if successful
  2961.             CF set on error
  2962.     AH = 02h get ???
  2963.         Return: CF clear
  2964.             AX = segment of ??? data structure
  2965.             Data Structure
  2966.             Offset    Size    Description
  2967.              00h    BYTE    ???
  2968.              01h    WORD    ???
  2969.                  ???
  2970.     AH = 03h get QEMM version
  2971.         Return: CF clear
  2972.             AX = BX = version in BCD
  2973.         Notes:    the official docs only state that the version is
  2974.               returned in BX
  2975.             MICEMM returns AX=0001h, BX unchanged
  2976.     AH = 04h ???
  2977.         Return: DX = ???
  2978.     AH = 05h set ???
  2979.         DX = ???
  2980.     AH = 06h set mapping context???
  2981.         CX = ??? (set to 0000h by DESQview EMM.DVR)
  2982.         DX = page table number
  2983.         Return: CF clear
  2984.     AH = 07h get mapping context???
  2985.         Return: CF clear
  2986.             DX = page table number
  2987.     AH = 08h ???
  2988.         CX = ??? (set to 0000h by DESQview EMM.DVR)
  2989.         DX = linear page number
  2990.         Return: CF clear
  2991.     AH = 09h ???
  2992.         CX = ???
  2993.         Return: CF clear
  2994.             DX = linear page number
  2995.     AH = 0Ah ???
  2996.         CX = ???
  2997.         DX = linear page number
  2998.         Return: CF clear
  2999.     AH = 0Bh ???
  3000.         BX = ???
  3001.         CX = ???
  3002.         DX = ???
  3003.         Return: AH = 00h
  3004.     AH = 0Ch get ???
  3005.         Return: CF clear
  3006.             BX = 0001h
  3007.             CX = ???
  3008.             DX = ??? (apparently zero/nonzero important)
  3009.     AH = 0Dh ???
  3010.         AL = zero/nonzero ???
  3011.         Return: CF clear
  3012.     AH = 0Eh set ??? callbacks
  3013.         DS:BX -> FAR routine for ???
  3014.         ES:DX -> FAR routine for ???
  3015.         Return: CF clear
  3016.         Note:    DS:BX callback should return BX=???; ES:DX is called
  3017.               with BX=???, and should set the ??? from which the
  3018.               other handler read the value of BX.  BH and BL
  3019.               appear to be separate values.
  3020.     AH = 0Fh ???
  3021.         CX = ??? (0100h)
  3022.         DX = ??? (0010h)
  3023.         ???
  3024.         Return: AL = 00h/01h if ???
  3025.     AX = 1000h get ???
  3026.         DS:SI -> 16-buffer for ??? GDT entries
  3027.         ES:DI -> buffer for ???
  3028.         Return: CF clear
  3029.             EAX = ??? (0000A5F7h for QEMM 6.00)
  3030.             DS:SI buffer filled with two GDT descriptors
  3031.             ES:DI buffer filled with ??? (page table entries???)
  3032.             DI points beyond last byte put in ES:DI buffer
  3033.     AX = 1001h get CPU debug registers
  3034.         ES:DI -> buffer for debug registers (8 DWORDs)
  3035.         Return: CF clear
  3036.             BL = ???
  3037.             ES:DI buffer filled
  3038.     AX = 1002h set CPU debug registers
  3039.         BL = ???
  3040.         ES:DI -> buffer containing debug registers (8 DWORDs)
  3041.         Return: CF clear
  3042.     AX = 1003h get machine status word
  3043.         Return: CF clear
  3044.             EAX = contents of CR0
  3045.     AX = 1004h ???
  3046.         ???
  3047.         Return: CF clear if successful
  3048.                 EDX = linear address of ???
  3049.             CF set on error
  3050.     AX = 1005h set ???
  3051.         EDX = ???
  3052.         Return: CF clear
  3053.     AX = 1006h NOP
  3054.         Return: CF set
  3055.     AX = 1007h get ???
  3056.         Return: CF clear
  3057.             EDX = ???
  3058.     AX = 1008h ???
  3059.         CX = ???
  3060.         ???
  3061.         Return: CF clear
  3062.             EDX = linear address of ???
  3063.     AX = 1009h ??? related to task switching???
  3064.         ESI = linear address of task switch??? info
  3065.         ???
  3066.         Return: ???
  3067.         Data Structure
  3068.         Offset    Size    Description
  3069.          00h    DWORD    value for CR3 (page table directory addr)
  3070.          04h    DWORD    linear addr of arg for LGDT
  3071.          08h    DWORD    linear addr of arg for LIDT
  3072.          0Ch    WORD    LDT selector
  3073.          0Eh    WORD    TR selector
  3074.     AX = 100Ah ??? related to task switching???
  3075.     AH = 11h get memory type map
  3076.         AL = zero/nonzero ???
  3077.         ES:DI -> 256-byte buffer for memory types
  3078.         Return: CF clear
  3079.             BL = ???
  3080.             ES:DI buffer filled
  3081.         Note:    each byte of the buffer corresponds to a 4K page, and
  3082.               contains the type of that page: 00h = mappable,
  3083.               02h = mapped ROM, 03h = high RAM, 04h = excluded,
  3084.               05h = video, 06h = ROM, 07h = adapter ROM,
  3085.               08h = split ROM, 09h = page frame, 0Ah = RAMmable,
  3086.               0Bh = conventional
  3087.     AH = 12h get HIRAM chain
  3088.         Return: CF clear
  3089.             BX = segment of first MCB in high memory
  3090.                 0000h if no high memory
  3091.     AX = 1300h ???
  3092.         BL = ???
  3093.         Return: CF clear
  3094.             ???
  3095.     AX = 1301h ???
  3096.         CX = ???
  3097.         DI:DX = ???
  3098.         Return: CF clear
  3099.     AX = 1302h ???
  3100.         ???
  3101.         Return: CF clear
  3102.             ???
  3103.         Note:    disables certain interrupts at the two 8259 PICs during
  3104.               execution; also modifies CRT controller during
  3105.               execution under certain circumstances
  3106.     AX = 1303h ??? EMS allocation
  3107.         BX = number of pages of EMS to allocate
  3108.         ???
  3109.         Return: CF clear if successful
  3110.             CF set on error
  3111.             ???
  3112.     AX = 1304h EMS deallocation
  3113.         DX = EMS handle
  3114.         Return: CF clear
  3115.     AX = 1305h ???
  3116.         CX = ???
  3117.         Return: CF clear
  3118.         Note:    disables certain interrupts at the two 8259 PICs during
  3119.               execution (see AX=130Ch)
  3120.     AX = 1306h ???
  3121.         ES:BX -> ???
  3122.         Return: CF clear
  3123.     AX = 1307h ???
  3124.         ???
  3125.         Return: CF clear
  3126.         Note:    disables certain interrupts at the two 8259 PICs during
  3127.               execution (see AX=130Ch)
  3128.     AX = 1308h ???
  3129.         BL = ??? (zero/nonzero)
  3130.         Return: CF clear
  3131.     AX = 1309h Hercules mode-change support
  3132.         ES:BX -> new address for Hercules mode-change callback
  3133.         Return: CF clear
  3134.         Note:    the callback function is called whenever the CRTC mode
  3135.               register is written, with AL set to the value written
  3136.     AX = 130Ah ???
  3137.         CX:DX -> ???
  3138.         Return: CF clear
  3139.     AX = 130Bh ???
  3140.         BL = ???
  3141.         Return: CF clear
  3142.             ???
  3143.     AX = 130Ch set interrupts to mask
  3144.         BX = interrupts to mask out during AX=1302h,AX=1307h,AX=1308h,
  3145.             AX=130Dh,AX=1310h (BL = master PIC, BH = slave PIC)
  3146.         Return: CF clear
  3147.     AX = 130Dh ???
  3148.         ???
  3149.         Return: CF clear
  3150.         Note:    disables certain interrupts at the two 8259 PICs during
  3151.               execution (see AX=130Ch)
  3152.     AX = 130Eh ??? (modifies CRT controller setup)
  3153.         ???
  3154.         Return: CF clear
  3155.     AX = 130Fh ??? (resets certain values)
  3156.         ???
  3157.         Return: CF clear
  3158.     AX = 1310h ???
  3159.         ???
  3160.         Return: CF clear
  3161.         Note:    disables certain interrupts at the two 8259 PICs during
  3162.               execution (see AX=130Ch)
  3163.     AX = 1311h set ???
  3164.         BL = ???
  3165.         Return: CF clear
  3166.     AX = 1400h ???
  3167.         ES:DI -> ??? data structure (at least 24 bytes)
  3168.         BL = ???
  3169.         Return: ???
  3170.         Data structure
  3171.         Offset    Size    Description
  3172.          00h      WORD    ???
  3173.          02h    DWORD    far pointer to ???
  3174.          06h    DWORD    far pointer to ??? pointer array (see below)
  3175.          0Ah    DWORD    far pointer to ???
  3176.          0Eh    DWORD    ???
  3177.          12h    WORD    segment of ???
  3178.          14h    DWORD    far pointer to ???
  3179.         Pointer array
  3180.         Offset    Size    Description
  3181.          00h    WORD    number of pointers to follow
  3182.          02h  N DWORDs    far pointers to ???
  3183.         Note: QEMM converts the pointers into linear addresses in place
  3184.     AX = 1401h ???
  3185.         Return: CF clear
  3186.             ???
  3187.     AX = 1402h ???
  3188.         BL = function
  3189.             00h NOP
  3190.             01h ???
  3191.             02h ???
  3192.             other ???
  3193.         ES:DI -> ???
  3194.         Return: CF clear
  3195.             ???
  3196.         Data structure
  3197.         Offset    Size    Description
  3198.          00h    WORD    segment of ??? (X, word at X:0136h set to X)
  3199.          02h    WORD    segment of ??? (word at X:0124h set to this)
  3200.          04h    WORD    number of paragraphs of ???
  3201.          06h  3 WORDs    ??? (copied to X:0000h)
  3202.          0Ch
  3203.     AX = 1403h add ??? to list and ???
  3204.         ES:DI -> ??? structure added to end of ??? list
  3205.             (at least 31 bytes, DWORD at offset 06h used for
  3206.              storing pointer to next struc, WORD at offset 00h
  3207.              seems to be a key or index)
  3208.         Return: CF clear
  3209.     AX = 1404h NOP
  3210.     AX = 1405h remove ??? from ??? list
  3211.         BX = key???
  3212.         Return: CF clear
  3213.     AX = 1406h ???
  3214.         ???
  3215.         Return: CF clear
  3216.             ???
  3217.     AX = 1407h ???
  3218.         ???
  3219.         Return: CF clear
  3220.             ???
  3221.     AX = 1408h ???
  3222.         ???
  3223.         Return: CF clear
  3224.             ???
  3225.     AX = 1409h ???
  3226.         ???
  3227.         Return: CF clear
  3228.             ???
  3229.     AX = 140Ah ???
  3230.         BX = ???
  3231.         Return: CF clear
  3232.             ???
  3233.     AX = 140Bh ???
  3234.         BX = ???
  3235.         Return: CF clear
  3236.             SI = ???
  3237.     AH = 15h ???
  3238.         ES:BX -> ??? or 0000h:0000h
  3239.         Return: CF clear
  3240.      ---QEMM v5.11+ ---
  3241.     AX = 1600h get memory access status
  3242.         ES:DI -> 256-byte buffer
  3243.         Return: ES:DI buffer filled
  3244.         Note:    each byte of the buffer indicates the status of a 4K
  3245.               page (bit 0 set if read, bit 1 set if written)
  3246.     AX = 1601h set memory access status
  3247.         ES:DI -> 256-byte buffer containing access statuses (see above)
  3248.     AH = 17h get memory usage statistics
  3249.         ES:DI -> 81-byte buffer for memory statistics (see below)
  3250.         Return: CF clear
  3251.     AH = 18h check whether conventional memory mapped into address range
  3252.         ES:BX = starting address
  3253.         CX = number of 4K pages
  3254.         Return: CF clear
  3255.             AL = 00h one or more pages is remapped
  3256.                  01h all pages in range are conventional memory
  3257.                      (physical address == virtual address)
  3258.     AH = 19h NOP
  3259.         Return: CF set
  3260.     AH = 1Ah I/O port access
  3261.         AL = subfunction
  3262.             00h get byte from I/O port
  3263.             Return: BL = port value
  3264.             01h send byte to I/O port
  3265.             BL = value to send
  3266.             02h send byte to I/O port, get byte from following port
  3267.             BH = value to send
  3268.             Return: BL = value read
  3269.             03h send bytes to two consecutive I/O ports
  3270.             BH = value for first I/O port (DX)
  3271.             BL = value for second I/O port (DX+1)
  3272.         DX = port number
  3273.         Return: CF clear
  3274.     AH = 1Bh Windows 3 support???
  3275.         AL = subfunction
  3276.             00h ???
  3277.             ES:DI -> buffer for ???
  3278.             Return: CF set on error
  3279.                 CF clear if successful
  3280.             Data structure:
  3281.             Offset    Size    Description
  3282.              00h    DWORD    ???
  3283.              04h    BYTE    ??? (v6.00 sets to 01h)
  3284.              05h    BYTE    ??? (v6.00 sets to 00h or 0Bh)
  3285.             01h ???
  3286.             Return: CF set on error
  3287.                 CF clear if successful
  3288.             02h ???
  3289.             Return: CF set on error
  3290.                 CF clear if successful
  3291.             03h ???
  3292.             DL = ???
  3293.             DI = ???
  3294.             Return: ???
  3295.             04h ???
  3296.             Return: CF clear
  3297.             05h ???
  3298.             DS:DX -> ASCIZ string (QEMM checks if ends in ".DRV"
  3299.             Return: CF clear
  3300.                 AL = 01h if string ends in ".DRV"
  3301.                    = FFh if string ends in "GDI.EXE"
  3302.                    = 00h otherwise
  3303.             06h ???
  3304.             CX = length of data pointed at by DS:DX
  3305.             DS:DX -> ???
  3306.             Return: CF clear
  3307.             07h BUG: QEMM 6.00 will accept this and branch randomly
  3308.             else Return: CF set
  3309.     AH = 1Ch protected-mode hardware interrupt handlers ???
  3310.         AL = subfunction
  3311.             00h restore IRQ0-7 handlers???
  3312.             01h set IRQ0-7 handlers???
  3313.             ES:DI -> 8 DWORDs containing ???
  3314.             02h restore IRQ8-15 handlers???
  3315.             03h set IRQ8-15 handlers
  3316.             ES:DI -> 8 DWORDs containing ???
  3317.         BUG: although the jump table only contains four entries,
  3318.             QEMM 6.00 will attempt to use it for any value of
  3319.             AL between 00h and 2Ah, thus branching unpredictably
  3320.             for AL=04h-2Ah
  3321.      ---QEMM v6.00+ ---
  3322.     AH = 1Dh ???
  3323.         AL = subfunction
  3324.             00h ???
  3325.             01h ???
  3326.             Note: clears any pending IRQ7 at end of function
  3327.             else
  3328.             Return: CF set
  3329.     AH = 1Eh Stealth information
  3330.         AL = subfunction
  3331.             00h get Stealth configuration
  3332.             Return: BL = flags
  3333.                     bit 0: conventional memory sorted
  3334.                     bit 1: conventional memory filled
  3335.                     bit 2: ???
  3336.                     bit 3: ???
  3337.                     bit 4: expanded memory is in use
  3338.                     bit 5: ???
  3339.                 BH = ??? (always 00h for v6.00)
  3340.                 CL = stealth type (00h none,46h Frame,4Dh Map)
  3341.                 CH = ??? (zero/nonzero important)
  3342.                 DX = ??? (always 0000h for v6.00)
  3343.                 SI = ??? (always 0000h for v6.00)
  3344.                 DI = ??? (always 0000h for v6.00)
  3345.             01h get number of Stealth'ed ROMs
  3346.             Return: CF clear
  3347.                 BX = number of Stealth'ed ROMs
  3348.             02h get Stealth'ed ROM info
  3349.                 ES:DI -> buffer for Stealth ROM info (see below)
  3350.             Return: CF clear
  3351.                 BX = number of Stealth'ed ROMs
  3352.                 ES:DI buffer filled
  3353.             else
  3354.             Return: CF set
  3355.     AH = 1Fh page table (page directory???) manipulation
  3356.         AL = subfunction
  3357.             00h get page table (page directory???) entry
  3358.             CX = entry number
  3359.             Return: EDX = page table/directory entry
  3360.                 CF clear
  3361.             01h set page table (page directory???) entry
  3362.             CX = entry number
  3363.             EDX = page table/directory entry
  3364.             Return: CF clear
  3365.             else
  3366.             Return: CF set
  3367.     AH = 20h asynchronous disk access support???
  3368.         AL = subfunction
  3369.             00h get ???
  3370.             Return: CF clear
  3371.                 BL = flags
  3372.                     bit 7: ??? (set if Stealth active)
  3373.                     bit 0: ???
  3374.             01h set ???
  3375.             BL = ??? (bit 0 only)
  3376.             Return: CF clear
  3377.             else
  3378.             Return: CF set
  3379.     AH = 21h Stealth support
  3380.         AL = subfunction
  3381.             00h copy data from Stealthed address space
  3382.             DS:SI -> start address of hidden memory to copy
  3383.             ES:DI -> buffer for copied data
  3384.             ECX = number of bytes to copy
  3385.             Return: CF clear if successful
  3386.                 CF set on error (DS:SI < C000h:0000h or
  3387.                          DS:SI + ECX > 1M)
  3388.             else
  3389.             Return: CF set
  3390.     other
  3391.         Return: CF set
  3392.  
  3393. Format of QEMM 6.0 memory statistics:
  3394. Offset    Size    Description
  3395.  00h    BYTE    ???
  3396.  01h    DWORD    initial conventional memory in bytes
  3397.  05h    DWORD    initial extended memory in bytes
  3398.  09h    DWORD    ???
  3399.  0Dh    DWORD    initial "top" memory in bytes
  3400.  11h 12 BYTEs    ???
  3401.  1Dh    DWORD    ???
  3402.  21h    DWORD    QEMM code size in bytes
  3403.  25h    DWORD    QEMM data size in bytes
  3404.  29h    DWORD    bytes used for TASKS=
  3405.  2Dh    DWORD    DMA buffer size
  3406.  31h    DWORD    bytes used for MAPS=
  3407.  35h    DWORD    bytes of high RAM???
  3408.  39h    DWORD    bytes used by mapped ROMs
  3409.  3Dh  8 BYTEs    ???
  3410.  45h    DWORD    bytes of expanded memory provided by QEMM
  3411.  49h    DWORD    ???
  3412.  4Dh    DWORD    conventional memory overhead in bytes
  3413.  
  3414. Format of Stealth ROM info [array]:
  3415. Offset    Size    Description
  3416.  00h    WORD    starting segment of ROM
  3417.  02h    WORD    length of ROM in paragraphs
  3418. ---------------------------------------------
  3419. This compilation is Copyright (c) 1989, 1990, 1991, 1992 Ralf Brown
  3420. ---------------------------------------------
  3421. ARPA: ralf@cs.cmu.edu
  3422. UUCP: {ucbvax,harvard}!cs.cmu.edu!ralf
  3423. BIT:  ralf%cs.cmu.edu@cmuccvma
  3424. FIDO: Ralf Brown 1:129/26.1
  3425.     or post a message to me in the DR_DEBUG echo
  3426. CIS:  >INTERNET:ralf@cs.cmu.edu
  3427.